1173:阶乘和
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
【来源】
No
1. #include <cstdio> 2. #include <cstring> 3. #include <iostream> 4. using namespace std; 5. int a[100000]={0}; 6. int b[100000]={0}; 7. int main() 8. { 9. int n,i,j,t,jw,len,len2; 10. scanf("%d",&n); 11. if(n==0){ 12. printf("1"); 13. return 0; 14. } 15. a[1]=1,len=1; 16. for(i=1;i<=n;i++){ 17. j=1; 18. jw=0; 19. while(j<=len){ 20. a[j]=a[j]*i+jw; 21. if(a[j]>=10){ 22. jw=a[j]/10; 23. a[j]%=10; 24. } 25. else jw=0; 26. j++; 27. } 28. while(jw>0){ 29. a[j]=jw%10; 30. jw/=10; 31. j++; 32. len++; 33. } 34. len2=len; 35. for(j=1;j<=len;j++){ 36. b[j]=b[j]+a[j]+jw; 37. if(b[j]>=10){ 38. jw=b[j]/10; 39. b[j]%=10; 40. } 41. else jw=0; 42. } 43. if(jw>0){ 44. b[j]=jw; 45. len2++; 46. } 47. } 48. for(i=len2;i>=1;i--) printf("%d",b[i]); 49. return 0; 50. }