解题思路:
我是一个初学者,只学到数组,所以用了数组的知识。
就是,用数组储存。个位存在数组最后(因为这个结果会一直在增大,你根本不知道会达到多少位)。然后,思想就是,像我们在草稿纸上用乘法竖式算乘法一个样子。比如乘以3,被乘数每一个数字都要与3相乘(从个位开始嘛),然后,超过9要进啊,(比如27,就要进2;18就要进1),然后,我用了digit[]数组来储存要进的数。
至于我里面的5660这些数怎么来。我是先给a[]数组弄一个很长的长度,比如10000、6000;但是我们输出,前面不能有多余的0 啊,所以,输出1977的阶乘后,我就缩小数组的长度,直到前面没有多余的0.
注意事项:
这个结果位数高达5千多位。
要注意数组的长度,不要溢出了,注意储存是的顺序(顺序还是倒序)。
注意,digit[]的长度比a[]的长度大一位。是为了在写循环体时个位和其他位(如百位,千位)一致。
1和任何数相乘均为数本身,故不做乘1运算无所谓。
参考代码:
#include<stdio.h>
int main()
{
int a[5660],i,j,digit[5661];
for(i=0;i<5659;i++)a[i]=0;
for(a[5659]=1,i=2;i<=1977;i++)
{
for(j=5659,digit[5660]=0;j>=0;j-- )
{
a[j]=a[j]*i+digit[j+1];
digit[j]=a[j]/10;
a[j]=a[j]%10;
}
}
for(i=0;i<=5659;i++) printf("%d",a[i]);
printf("\n");
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题6.3 (Java代码)浏览:695 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:583 |
C语言考试练习题_排列 (C语言代码)浏览:1373 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言训练-阶乘和数* (C语言代码)-------- 呆板写法浏览:1396 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:699 |
1011题解浏览:819 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:585 |
简单的a+b (C语言代码)浏览:572 |