题目描述
用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入格式
一个正整数N。
输出格式
一个正整数S,表示计算结果。
输入输出样例
输入
3
输出
9
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int a[1000] = { 0 }, b[1000] = { 0 };//初始化a数组,b数组全为0
//相乘
void multiply(int m)//注意要用一个变量存储进位的值
{
int c = 0;
for (int i = 0; i < 1000; i++)
{
a[i] = a[i] * m + c;
c = a[i] / 10;
a[i] = a[i] % 10;
}
}
//相加之和
void sum()//注意要用一个变量存储进位的值
{
int c = 0;
for (int i = 0; i < 1000; i++)
{
b[i] += a[i] + c;
c = b[i] / 10;
b[i] = b[i] % 10;
}
}
int main() {
int n;
cin >> n;
a[0] = 1;//因为要用它乘以一个数,且等于那个数
for (int i = 1; i <= n; i++)
{
//每一次相乘之后,都进行了累加
//无论是相乘还是相加,都是两者之间的运算
multiply(i);
sum();
}
int j = 1000 - 1;
while (b[j] == 0 && j > 0)
{
j--;
}
for (int i = j; i >= 0; i--)
{
cout << b[i];
}
return 0;
}
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教 。