测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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;
}


上一题 下一题