PAT 6-10
6-10 阶乘计算升级版 (20 分)
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
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; } /* 你的代码将被嵌在这里 */
void Print_Factorial ( const int N ) { int n=N; if(n<0) { printf("Invalid input"); return; } int nums[10000]={0}; //创建一个数组用于存放结果 int k=1; //结果的位数,最少为1 int up=0; //进位 nums[0]=1; //初始化个位结果为1 int temp; for(int i=2;i<=n;i++) { for(int j=0;j<k;j++) { temp=nums[j]*i+up; //临时结果=前阶乘结果的某位*i+up nums[j]=temp%10; //临时结果给位的数 up=temp/10; //看是否需要进位 } while(up!=0) //看最后得到的up是否需要进位 { nums[k]=up%10; //现最高位上的数 up/=10; //up>0则需进位,k++ k++; } } for(int i=k-1;i>=0;i--) { printf("%d",nums[i]); //输出最终结果 } }
浙公网安备 33010602011771号