1 条题解

  • 0
    @ 2023-6-11 12:16:31

    C :

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    #include<math.h>
    int a[10005],s[10005];
    //每次都计算 a数组*k 
    void ans(int k){ //123
    	int i;
    	//每一位都乘以k 
    	for(i=0;i<10000;i++){
    		a[i] = a[i]*k;
    	}
    	for(i=0;i<10000;i++){
    		a[i+1] = a[i+1] + a[i]/10;
    		a[i] = a[i]%10;
    	}
    }
    void add(){
    	int i;
    	for(i=0;i<10000;i++){
    		s[i] = s[i]+a[i];
    		s[i+1] = s[i+1] + s[i]/10;
    		s[i] = s[i]%10; 
    	}
    }
    int main(){
    	int n,i,j;
    	scanf("%d",&n);
    
    	for(i=1;i<=n;i++){
    		memset(a,0,sizeof(a)); 
    		a[0] = 1; 
    		for(j=1;j<=i;j++){
    			ans(j);
    		}
    		add();
    	}
    
    	int p=1000;
    	for(i=p;i>=0;i--){
    		if(s[i]!=0){
    			p = i;
    			break;
    		}
    	}
    	for(i=p;i>=0;i--){
    		printf("%d",s[i]);
    	}
    	return 0;
    }
    
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    void show(int a[],int n){
    	for(int i = 0;i < n;i++){
    		cout<<a[i]<<" ";
    	}
    	cout<<endl;
    }
     
    int main(){
        int a[100][100] = {0};//存储每一项(2、2*2、2*2*2...) 
        int r[100] = {0};//存储总和的结果 
        int i,j,n;
        cin>>n;
        a[1][0] = 1;
        int k = 1;//代表第i项共有多少位 
        for(i = 2;i <= n;i++){
        	//逐项乘n 
            for(j = 0;j < k;j++){
                a[i][j] = a[i - 1][j] * i;
            }
             
            //最多多3位出来(乘以100) 
            k = k + 3; 
            for(j = 0;j < k;j++){
                if(a[i][j] >= 10){
                    a[i][j + 1] = a[i][j + 1] + a[i][j] / 10;
                    a[i][j] = a[i][j] % 10; 
                }
            }
            
            //判断第i项乘以n后有没有多一项出现
            while(a[i][k-1]==0){
                k--;
            }
            
    //        show(a[i],k);
        }
         
        //求和
        for(i = 1;i <= n;i++){
            for(j = 0;j < k;j++){
                r[j] = r[j] + a[i][j];
                 
                if(r[j] >= 10){
                    r[j + 1] += r[j] / 10;
                    r[j] = r[j] % 10;
                }
            }
             
            if(r[k] > 0){
                k++;
            }
        }
         
        int p = 0;
        for(i = k - 1;i >= 0;i--){
            if(r[i] != 0){
                p = i;
                break;
            }
        } 
     
        for(i = p;i >= 0;i--){
            cout<<r[i];
        } 
    }
    

    Python :

    import math
    s=0
    for i in range(1,int(input())+1):
    	s+=math.factorial(i)
    print(s)
    
    • 1

    信息

    ID
    2211
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者