描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
格式
输入格式
一个正整数n。
输出格式
计算结果S。
样例
输入样例
5
输出样例
153
限制
时间限制:1000 ms
内存限制:65536 KB
题目其实很简单的,这个题可以拆分为两个题,一个是高精度运算求阶乘,另一个是高精度运算求和。
对于高精度运算,一般都是用数组要储存数据。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 50005;
int ans[maxn], tmp[maxn];
void multiply(int j){ //求阶乘
for (int i=1; i<=j; i++) {
int tmpa = 0;
for (int k=0; k<maxn; k++) {
tmp[k] = tmp[k]*i + tmpa;
tmpa = tmp[k] / 10;
tmp[k] = tmp[k] % 10;
}
}
}
void add(){ //求和
int tmpb=0;
for (int i=0; i<maxn; i++) {
tmpb += ans[i] + tmp[i];
int cur = tmpb % 10;
tmpb = tmpb / 10;
ans[i] = cur;
}
}
int main()
{
int n, m;
scanf ("%d", &n);
memset(ans, 0, sizeof(ans));
for (int i=1; i<=n; i++) {
memset(tmp, 0, sizeof(tmp));
tmp[0] = 1;
multiply(i);
add();
}
for (int i=maxn-1; i>=0; i--) {
if (ans[i]) {
m = i;
break;
}
}
for (int i=m; i>=0; i--) {
printf ("%d", ans[i]);
}
return 0;
}
版权声明:本文为wodemaoheise原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。