本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
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
#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 k=1,n=0; int temp; int num[10000]={0}; int i,j; num[0]=1; if(N>=0 && N<=1000) { //实现模拟高位阶乘 //这里n是进位,k代表当前运算的数的位数 for(i=2;i<=N;i++){ for(j=0;j<k;j++){ temp=num[j]*i+n; num[j] = temp%10; n=temp/10; } //上方的for循环,是【当前的数的每一位 * i 】,运算过程中可能有进位n,所以要加上进位n ----> temp = num[j]*i+n; 然后将结果存在数组中 //下方的while循环,是判定最后的结果是否有进位n,如果有进位n,则向后新加一位,即在k位置处填入相应的数字,再令k++,直到没有进位 while(n!=0){ num[k]=n%10; n=n/10; k++; } } //END:模拟高位阶乘 //可以演算一边求 4!,过程逻辑应该很清晰 for(i=k-1;i>=0;i--){ printf("%d",num[i]); } }else{ printf("Invalid input"); } }
原文地址:https://www.cnblogs.com/expedition/p/12208593.html
时间: 2024-11-13 11:12:08