A24192. 阶乘和
填空题
困难
知识点
题目描述
阶乘和
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤100),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
输入
一个正整数n。
输出
计算结果S。
输入样例
5输出样例
153参考答案
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int s = 0, a = 1;//a:某一阶乘项的值
for(int i = 1; i <= n; ++i)
{
a *= i;//本句运行结束后,a的值为i!
s += a;//加和变量中增加i!
}
cout << s;
return 0;
}答案解析
#include<bits/stdc++.h>
using namespace std;
#define N 205
void setLen(int a[], int i)
{
while(a[i] == 0 && i > 1)
i--;
a[0] = i;
}
void Multiply(int a[], int b)//高精乘低精 a *= b
{
int c = 0, i;
for(i = 1; i <= a[0]; ++i)
{
a[i] = a[i]*b + c;
c = a[i] / 10;
a[i] %= 10;
}
while(c > 0)
{
a[i] = c % 10;
c /= 10;
i++;
}
setLen(a, i);
}
void Add(int a[], int b[])//高精加高精 a += b
{
int c = 0, i;
for(i = 1; i <= a[0] || i <= b[0]; ++i)
{
a[i] += b[i] + c;
c = a[i] / 10;
a[i] %= 10;
}
if(c > 0)
a[i] = c;
setLen(a, i);
}
void showNum(int a[])
{
for(int i = a[0]; i >= 1; --i)
cout << a[i];
}
int main()
{
int a[N] = {1, 1}, s[N] = {1, 0}, n;//数字a初值为1 加和s初值为0
cin >> n;
for(int i = 1; i <= n; ++i)
{
Multiply(a, i);
Add(s, a);
}
showNum(s);
return 0;
}
上一题
下一题