第20届上海市青少年计算机应用操作竞赛 ☆线下赛 T1.阶乘求和
内存限制: 256 Mb时间限制: 1000 ms
题目描述
n 的阶乘记为 n!,它的定义如下:
n!=1×2×⋯×n
给定一个正整数 n,请计算并输出
1!+2!+3!+⋯+n!
比如 1!+2!+3!=1+2+6=9。
输入格式
单个整数:表示 n。
输出格式
单个整数:表示 1! 到 n! 的和。
数据范围
对于 30% 的数据,1≤n≤12;
对于 60% 的数据,1≤n≤20;
对于 100% 的数据,1≤n≤100;
样例数据
输入:
3
输出:
9
题目难度不大 高精度乘法与高精度加法的基础应用 需要关注的细节比较多
1. #include<bits/stdc++.h> 2. using namespace std; 3. int num[305]; 4. int jc[305]={0,1}; 5. int lj=1,ln=1; 6. void mul(int n){ 7. int jw=0; 8. for(int i=1;i<=lj;i++){ 9. jc[i]=jc[i]*n+jw; 10. jw=jc[i]/10; 11. jc[i]%=10; 12. } 13. while(jw>0){ 14. jc[++lj]=jw%10;jw/=10; 15. } 16. } 17. void add(){ 18. int jw=0; 19. ln=max(ln,lj); 20. for(int i=1;i<=ln;i++){ 21. num[i]+=jc[i]+jw; 22. jw=num[i]/10; 23. num[i]%=10; 24. } 25. if(jw>0) num[++ln]=jw; 26. } 27. int main() 28. { 29. int n; 30. cin>>n; 31. for(int i=1;i<=n;i++){ 32. mul(i);add(); 33. } 34. while(ln>1&&num[ln]==0)ln--; 35. for(int i=ln;i>=1;i--)cout<<num[i]; 36. return 0; 37. }