当前位置: 代码迷 >> 综合 >> 阶乘求解升级版
  详细解决方案

阶乘求解升级版

热度:10   发布时间:2023-10-13 10:55:01.0

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include <stdio.h>void Print_Factorial ( const int N );int main()
{int N;scanf("%d", &N);Print_Factorial(N);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000
解题思路:由于N为1000以内的整数,若以常规方法会导致溢出。所以需要采取用数组来存取数值的每一位。即模拟乘法运算的过程
参考解答:#include <stdio.h> void Print_Factorial ( const int N ); int main() { int N; scanf("%d", &N); Print_Factorial(N); return 0; } /* 你的代码将被嵌在这里 */ void Print_Factorial(const int N) { if(N<0) { printf("Invalid input\n"); } else { int num[3001]={0};//用来存放数据的每一位 int k=1;//将数据初始值为一位 int temp;//用来记录每次计算后数据的大小 int n=0; //作为进位 num[0]=1;//先将初始值赋值为1 for(int i=2;i<=N;i++) { for(int j=0;j<k;j++) { temp=num[j]*i+n;//相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位) num[j]=temp%10;//更新临时结果的位上信息 n=temp/10;//看是否有进位 } while(n!=0) { num[k]=n%10; //新加一位,添加信息。位数增1 k++; n/=10;//看还能不能进位 } } for(int i=k-1;i>=0;i--) { printf("%d",num[i]); } printf("\n"); } }
  相关解决方案