大数阶乘求和(c++&&java&&python)
题目来源:
http://129.211.20.246/problem.php?cid=1000&pid=4
参考代码:
c++:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int a[55][100],s[55][100];
int main()
{
int x=0,len=1;
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
a[1][1]=1;
for(int i=2;i<=50;i++)
{
for(int j=1;j<=len;j++)
{
a[i][j]=(i*(a[i-1][j])+x)%10;
x=(i*(a[i-1][j])+x)/10;
}
while(x)
{
a[i][++len]=x%10;
x/=10;
}
for(int j=len+1;j<=100;j++)
a[i][j]=0;
}
len=1;x=0;
s[1][1]=1;
for(int i=2;i<=100;i++)
s[1][i]=0;
for(int i=2;i<=50;i++)
{
for(int j=1;j<=100;j++)
{
s[i][j]=(s[i-1][j]+a[i][j]+x)%10;
x=(s[i-1][j]+a[i][j]+x)/10;
}
while(x)
{
s[i][++len]=x%10;
x/=10;
}
}
int n;
cin>>n;
int flag=0;
for(int i=100;i>0;i--)
{
if(!flag&&s[n][i]) flag=1;
if(flag) printf("%d",s[n][i]);
}
printf("\n");
return 0;
}
java:
import java.*;
import java.awt.geom.AffineTransform;
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
BigInteger ans = new BigInteger("0");
for(int i=1;i<=n;i++) {
BigInteger a= new BigInteger("1");
for(int j=1;j<=i;j++) {
a=a.multiply(new BigInteger(""+j));
}
ans=ans.add(a);
}
System.out.println(ans);
}
}
python:
n = int(input())
jie = 1
ans = 0
i = 1
while n >= i:
jie = jie * i
ans = ans + jie
i = i + 1
print(ans)