原题链接:C语言训练-计算1977!*
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
@nctdream #include <stdio.h> int main() { int i,j,k=0; int a[10000]; a[0]=1; for(i=1; i<=10000; i++) { a[i]=0; } for(i=2; i<=1977; i++) /*阶乘每一位数*/ { for(j=0; j<=k; j++) /*k使位数限定,即每次a[j]*=i时都只乘一位数*/ { a[j]*=i;/*阶乘每一位数*/ } for(j=0; j<=k; j++) { if(a[k]>=10)/*判断首位是否大于十,如果大于十,则k++,增加一位数*/ { k++; } if(a[j]>=10)/*判断每一位数,如果该位数大于十,则进位*/ { a[j+1]+=(a[j]/10); a[j]%=10; } } } for(i=k; i>=0; i--) { printf("%d",a[i]); } return 0; }@nctdream #include<stdio.h> int main() { int i,j,k; int a[10000]; //用数组存储结果 a[0]=1; //先存储1! k=0; //用k来表示数组中数的第一位的下标 for(i=1;i<=10000;i++) { a[i]=0; } for(i=2; i<=1977; i++) //从1乘到1977 { for(j=0; j<=k; j++) //用i乘以每个数 a[j]=a[j]*i; for(j=0; j<=k; j++) //判断每个数是否大于10;大于10就进位 { if(a[k]>=10) //判断数的第一位是否大于10;大于10 k就自加 k++; if(a[j]>=10) //判断每一位的数是否大于10,大于就进位 { a[j+1]=a[j+1]+a[j]/10; a[j]=a[j]%10; } } } for(i=k; i>=0; i--) //输出,从数的第一位开始输出 printf("%d",a[i]); return 0; }@nctdream 但加上for(i=1;i<=10000;i++) { a[i]=0; }才能正确