2332 - 高精度阶乘的和

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 125 MB

用高精度计算出S=1!+2!+3!++N!N50),其中"!"表示阶乘,例如:5!=5*4*3*2*1

输入正整数N,输出计算结果S。


题目输入

每个测试文件只包含一组测试数据,每组输入一个正整数N。


题目输出

对于每组输入数据,输出阶乘和的计算结果。


输入/输出样例

输入格式

3

输出格式

9

C语言解答

#include <stdio.h>
#include<string.h>
int jinwei(int *a,int l)
{
    int i,flat=0;
    for(i=0;i<l;i++)
   {
        if(a[i]>=10)
    {
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    if(a[i]) flat=i;
   }
   return flat;
}
int sum(int *a,int *b)
{
    int i;
    for(i=0;i<70;i++)
    a[i]+=b[i];
    int l=jinwei(a,100);
    return l;
}
void jiecheng(int *b,int n)
{
     int  j,w;
       b[0]=1;
    for(w=n;w>1;w--)
       {
            for(j=0;j<70;j++)
            b[j]*=w;
            jinwei(b,70);
       }
}
int main()
{
    int a[100],b[70],n;
   scanf("%d",&n);
   {
        memset(a,0,sizeof(a));
{
    int i;
    for(;n>=1;n--)
    {
        memset(b,0,sizeof(b));
        jiecheng(b,n);
       i=sum(a,b);
    }
        for(;i>=0;i--)
        printf("%d",a[i]);
        printf("\n");
}
   }


    return 0;
}

C++解答

#include<stdio.h>
#include<string.h> 
int f[4000],b[4000];
int main()
{
    int i,j,n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(f,0,sizeof(f));
		memset(b,0,sizeof(b));
        f[0]=1,b[0]=1;
        for(i=2;i<=n;i++)
        {
            int c=0;
            for(j=0;j<4000;j++)
            {
                int s=f[j]*i+c;
                f[j]=s%10;
                c=s/10;
            }
			for(j=0;j<4000;j++)
			{
				if(b[j]+f[j]>9)
				{
					b[j]=b[j]+f[j]-10;
					b[j+1]++;
				}
				else
					b[j]=b[j]+f[j];
			}
        } 
        for(j=3999;j>=0;j--) 
           if(b[j]) break;
        for(i=j;i>=0;i--)  printf("%d",b[i]);
        printf("\n");   
    }    
    return 0;
}   

Java解答

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;


public class Main {
public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	while(in.hasNextInt()){
		int n=in.nextInt();
		BigInteger ans=BigInteger.ZERO;
		BigInteger fac=BigInteger.ONE;
		for(Integer i=1;i<=n;i++){
			BigInteger t=new BigInteger(i.toString());
			fac=fac.multiply(t);
			ans=ans.add(fac);
		}
		System.out.println(ans);
	}
}
}

Python解答

# coding=utf-8
n=eval(input())
s=0
for i in range(1,n+1):
    t=1
    for j in range(1,i+1):
        t*=j
    s+=t
print(s)