1977年C语言编译程序,【C语言训练】计算1977!* (C语言代码)

解题思路:

1977!的值不超过一万位,用一个含有10000个元素的整型数组x存放结果

每个元素存放一位,x[0]存放个位数字,x[1]存放十位数字,以此类推,

假如8!计算出来的值40320放在x中,......4   3   2   1   0 --数组元素下标

... 4   0   3    2   0 --存放的值

当前数组长度len=4,求9!时,将j=9与数组中每个元素依次相乘,rem保存当前进位数字

过程:1, rem赋初值0

2, i=0: rem=rem+x[0]*9=0+0=0;x[0]=rem%10=0;rem=rem/10=0;

3, i=1: rem=rem+x[1]*9=0+18=18;x[1]=rem%10=8;rem=rem/10=1;

4, i=2: rem=rem+x[2]*9=1+27=28;x[2]=rem%10=8;rem=rem/10=2;

5, i=3: rem=rem+x[3]*9=2+0=2;x[3]=rem%10=2;rem=rem/10=0;

6, i=4: rem=rem+x[4]*9=0+36=36;x[4]=rem%10=6;rem=rem/10=3;

7, rem=3; len=len+1=5; x[5]=rem%10=3; rem=rem/10=0;结束

x的各位结果为3,6,2,8,8,0, 9!=362880

注意事项:

参考代码:

int x[10000];

int i,j,rem = 0,len = 0;

//rem是保存当前进位数字,len是数组长度

x[0] = 1;

for(j = 2;j <= 1977;j++)

{

for(i = 0;i <= len;i++)

{

rem = rem + x[i] * j;

x[i] = rem % 10;

rem /= 10;

}

if( rem != 0)

{

x[i] = rem % 10;

rem /= 10;

len++;

//这里因为随着数据增大,rem有可能不止进一位数的位,rem可能为2位数

//所以加个循环,注意,赋值不要重复了,所以是x[++i]

while(rem != 0)

{

x[++i] = rem % 10;

rem /= 10;

len++;

}

}

}

for(i = len;i >= 0;i--)

{

printf("%d",x[i]);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值