ps:刚才重打了这段代码,之前的有错
#include <iostream> #include<cstdio> using namespace std; #define MAX 10000 #define BASE 100000//基度可以选不同的值 ,eg:80000 int h[MAX];//10000大小的数组 int main() { int i,j,k,carry; int n; while(scanf("%d",&n)!=EOF) { memset(h,0,MAX*sizeof(int)); h[0]=1;//第一个数标记为1,当输入为0,和1时,输出此值 for(i=2;i<=n;i++) { carry=0;//表示进位 //将阶乘存到数组中,如果是0,1,将会跳过这一步 for(k=0;k<MAX;k++)//遍历所开数组的每一个数进行进位以及数的保存 { carry=carry+i*h[k]; h[k]=carry%BASE;//将该位未进位的数保存 carry=carry/BASE;//将进位的数保存 } } //打印数组 for(j=MAX-1;j>=0;j--) { if(h[j]) { break; } } printf("%d",h[j]); for(i=j-1;i>=0;i--)//当输入为0,1时,跳过此for循环 { printf("%05d",h[i]); } printf("\n"); } return 0; }
时间: 2024-11-09 02:21:06