這道題我還是用兩種方法來寫(C++/Java),具體的方法請參照下面這篇博客:
題目鏈接:
大整數的操作—階乘,加法,乘法-----比對C++與java
解題思路:
java:
* 直接使用java自帶的BigInteger,外加一個for循環就能搞定
C++:
* 直接模擬豎式加法和豎式乘法
好!廢話不多說,直接看代碼
Java代碼:
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n=cin.nextInt();
BigInteger sum=new BigInteger("0");
for(int i=1;i<=n;++i)
{
BigInteger factorial=new BigInteger("1");
BigInteger flag=BigInteger.valueOf(1);
for(int j=1;j<=i;++j)
{
factorial=factorial.multiply(flag);
flag=flag.add(BigInteger.valueOf(1));
}
sum=sum.add(factorial);
}
System.out.println(sum);
cin.close();
}
}
C++代碼:
#include <bits/stdc++.h>
using namespace std;
const int maximum = 10e4+5;
int sum[maximum], a[maximum];
int main()
{
int n;
scanf("%d", &n);
memset(sum, 0, sizeof(sum));
memset(a, 0, sizeof(a));
a[0] = 1;
sum[0] = 1;
int p = 1, sumUp = 1;
for (int i = 2; i <= n; i++) // 模擬階乘
{
int up = 0, temp = 0;
for (int j = 0; j < p; ++j) // 模擬進位
{
temp = a[j] * i + up;
up = temp / 10;
a[j] = temp % 10;
}
while (up > 0)
{
a[p++] = up % 10;
up /= 10;
}
sumUp = max(sumUp, p);
int flag = 0, tmp = 0, k = 0;
for (k = 0; k < sumUp; ++k) // 模擬加法
{
tmp = sum[k] + a[k] + flag;
flag = tmp / 10;
sum[k] = tmp % 10;
}
while (flag > 0)
{
sum[sumUp++] = flag % 10;
flag /= 10;
}
}
for (int i = sumUp - 1; i >= 0; --i)
printf("%d", sum[i]);
printf("\n");
return 0;
}