读书人

hdu 1042 大数阶乘 求教解决方法

发布时间: 2012-03-29 12:53:12 作者: rapoo

hdu 1042 大数阶乘 求教
代码里这个地方没懂诶~求教求教
这是代码的原地址:
http://www.cppblog.com/wuxu/archive/2010/10/31/131893.html

C/C++ code
#include<iostream>using namespace std;int a[8001],n;int main(){    while(scanf("%d",&n)!=EOF)    {        int i,j;        memset(a,0,sizeof(a));        for(i=2,a[0]=1;i<=n;i++)        {            for(j=0;j<8000;j++) a[j]*=i;                for(j=0;j<8000;j++)            {                a[j+1]+=a[j]/100000;                a[j]%=100000;            }        }            for(i=8000;i>=0&&!a[i];i--);        printf("%d",a[i--]);        for(;i>=0;i--) printf("%05d",a[i]);        printf("\n");    }    return 0;}

a[j+1]+=a[j]/100000;
a[j]%=100000;
这一步是干什么的? 100000是怎么来的?


[解决办法]
int数组 a 中的每个数字储存5位数, 那么a[8001]错不多就能储存40000位数字,a[8001]连起来相当于一个40000位的字符串数组
[解决办法]
a[j+1]+=a[j]/100000 大概就是进位,17*2 7*2=14 超过10 要进一位 十位就是2加上进上来的1,a[j+1]+=a[j]/100000,除以100000的话 就是5位数乘以大于2的数 得到的是6位数 最高位肯定要进上去,求最高位的话就是/100000,然后计算其他几位

读书人网 >C++

热点推荐