3 solutions

  • 2
    @ 2024-2-22 21:27:45

    如果再写一个判断进位的函数会TLE,所以可以用变量来记录进位,省了一个循环👍

    #include<bits/stdc++.h>
    using namespace std;
    int arr[1100000]={1};
    int main(){
        int n,len=1,jw=0;
        cin>>n;
        for(int i=2;i<=n;i++){
            for(int j=0;j<len;j++){
                arr[j]=arr[j]*i+jw;//每位乘并加上上一个数的进位
                jw=0;//清0
                if(arr[j]>=10){
                    jw=arr[j]/10;//计算进位,在下一位加上
                    arr[j]%=10;
                    if(j+1==len) len++;
                }
            }
        }
        int flag=0; 
        for(int i=len-1;i>=0;i--){
            if(arr[i]!=0 || flag==1) flag=1,cout<<arr[i];
        }
        return 0;
    }
    
    • 1
      @ 2024-1-27 10:26:19

      `

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e6+10;
      int ans[N],len=1;
      void mul(int x)
      {
      	for(int i=0;i<len;i++)ans[i]*=x;
      	for(int i=0;i<len;i++)
      	{
      		ans[i+1]+=ans[i]/10000;
      		ans[i]%=10000;
      	}
      	while(ans[len]!=0)
      	{
      		ans[len+1]=ans[len]/10000;
      		ans[len]%=10000;
      		len++;
      	}
      }
      int main()
      {
      	int n;
      	cin>>n;
      	ans[0]=1;
      	for(int i=2;i<=n;i++)mul(i);
      	len--;
      	cout<<ans[len];
      	for(int i=len-1;i>=0;i--)printf("%04d",ans[i]);
      	return 0;
      }
      
      • 0
        @ 2025-3-19 13:21:20
        #include<bits/stdc++.h>
        using namespace std;
        int ans[1000010]={1},sum=1;
        int main(){
        	int n;
        	cin>>n;
        	for(int i=1;i<=n;i++){
        		for(int j=0;j<sum;j++)ans[j]*=i;
        		for(int j=0;j<sum;j++){
        			if(ans[j]>9){
        				if(j+1>=sum)sum++;
        				ans[j+1]+=ans[j]/10;
        			}
        			ans[j]%=10;
        		}
        	}
        	bool f=false;
        	for(int i=sum-1;i>-1;i--)if(ans[i]!=0||f)f=true,cout<<ans[i];
        	return 0;
        }
        
        • 1

        Information

        ID
        658
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        7
        Tags
        # Submissions
        121
        Accepted
        27
        Uploaded By