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,然后计算其他几位