下面这道题在打印上有些错误,第一行最后一组数字699263
应改为699238
如果对100!这个数没有什么概念,可以从1!开始找规律:
1! | 1 |
---|---|
2! | 2 |
3! | 6 |
4! | 24 |
5! | 120 |
6! | 720 |
7! | 5040 |
8! | 40320 |
9! | 362880 |
10! | 3628800 |
11! | 39916800 |
…… | …… |
100! | ? |
按照输出格式,每六位分一格
#include<stdio.h>
int main()
{
int a[256],b,d;//数组存储中间乘法结果
int m,n,i,j,cnt=1,flag=0;
scanf("%d",&n);//求n的阶乘
m=1;//表示占用格子数
a[1]=1;
for(i=2;i<=n;i++){//每次循环将2到n依次累乘到结果中
d=0;//表示进位
for(j=1;j<=m;j++){
b=a[j]*i+d;
a[j]=b%1000000;//保存每次结果的低六位
d=b/1000000;
}
if(d!=0){//如果进位不为0
a[j]=d;//将进位存在高位里面
m++;
}
}
printf("%d!\t=%d\t",n,a[m]);
for(i=m-1;i>=m-4;i--){
printf("%06d\t",a[i]);
}
printf("\n");
for(i=m-5;i>=1;i--){
printf("%06d\t",a[i]);
if(cnt%6==0)
printf("\n");
cnt++;
}
return 0;
}