标签:
这题不会,水平太次,把问题转换为程序的能力太弱了,不知道哪方面不足。
直接copy的最优代码:
#include<iostream> #include<iomanip> using namespace std; //存储20000以内的阶乘 int a[15470]; //用数组来存储结果,每个元素存一个五位数 int main() { int n; cin>>n; a[1]=1; a[0]=1; //这个a[0]是个计数器,记录五位数的个数 int up; //向前一个五位数的进位 for(int i=2;i<=n;++i) //从2到n的乘数 { up=0; //乘完每个乘数进位归零 for(int j=1;j<=a[0];++j) //已有数值位参与运算 { a[j] *=i; //每一个五位数乘以乘数 a[j] +=up; //加上进位 up=a[j]/100000; //计算下一个进位 a[j] %=100000; //当前五位数的值 } if(up!=0) { a[0]++; //若有进位,计数器加一 a[a[0]]=up; //存放进位 } } if(a[0]==1) cout<<a[1]; else { cout<<a[a[0]]; for (int i=a[0]-1;i>0;i--) { cout<<setfill(‘0‘)<<setw(5)<<a[i]; //补足五位数 } } }
标签:
原文地址:http://www.cnblogs.com/ekinzhang/p/4330761.html