5 条题解

  • 0
    @ 2024-10-29 10:42:34
    def fac(x):
        if x==0:
            return 1
        return x*fac(x-1)
    n=int(input())
    print(str(n)+'!='+str(fac(n)))
    
    • 0
      @ 2023-9-27 9:39:56

      首先,这题的数据非常的小

      我写的int128跑这题使用了4ms,但是好在AC了,所以用不着高精度捏。

      所以使用高精度的差不多够了哈。这题考察的也根本不是高精度,考场出高精度基本要被骂毒瘤出题人的。

      以下正常代码(部分):

      #define i128 __int128
      void solve()
      {
      	i128 n,ans=1;
      	read(n);
      	for(i128 i = 2 ; i<=n ; i++){
      	    ans*=i;
      	}
      	print(n); cout<<"!=" ; print(ans);
      }
      

      long long 爆掉了,所以不建议,unsigned long long应该也不行。建议学习有关__int128的知识,和写一个快读快写差不了多少。

      还有虽然有些人不知道int128,但至少把高精写在主函数外面啊喂!

      递归做法:

      i128 genshin(i128 p){
          if(p==1)return 1;
          return p*genshin(p-1);
      }
      void solve()
      {
          i128 n,ans=1;
          read(n);
          ans=genshin(n);
          print(n); cout<<"!=" ; print(ans);
      }
      
      • 0
        @ 2023-4-8 20:11:04

        python

        n=int(input())
        def N(n):
            if n==1:
                return 1
            else:
                return n*N(n-1)
        print('%s!=%s'%(n,N(n)))
        
        • -1
          @ 2023-2-17 14:12:26

          print(list(map(lambda x:f"{x}!={import('math').factorial(x)}",[int(input())]))[0])

          • -4
            @ 2023-7-31 15:51:03

            都给我用C++😕

            朴实无华👀️

            #include<bits/stdc++.h>
            #include<string>
            using namespace std;
            
            int a[10000];
            int b[10000];
            int c[10000];
            
            int main()
            {
            
                int o;
                cin >>o;
                int la,lb,lc;
                if(o==1){cout<<"1!=1";}
                else{
                    for(int i=2; i<=o; i++){
                        if(i==2){
                            la=1;
                            a[1]=1;
                        }
                        else{
                            la=lc;
                        }
                        lb=0;
                        int k=i;
                        for(int j=1; j>0; j++){
                            lb++;
                            b[j]=k%10;
                            k=k/10;
                            if(k<10 && k!=0){
                                b[j+1]=k;
                                lb++;
                                break;
                            }
                            if(k==0){break;}
                        }
                        lc=lb+la;
                        for(int j=1; j<=la; j++){
                            for(int t=1; t<=lb; t++){
                                c[t+j-1]=a[j]*b[t]+c[t+j-1];
                                c[t+j]=c[t+j]+c[t+j-1]/10;
                                c[t+j-1]=c[t+j-1]%10;
                            }
                        }
                        if(c[lc]==0){lc--;}
                        for(int j=1; j<=lc; j++){
                            a[j]=c[j];
                            c[j]=0;
                        }
                    }
                    cout<<o<<"!=";
                    for(int i=lc; i>=1; i--){
                        cout<<a[i];
                    }
                }
            
            	return 0;
            }
            
            • @ 2023-9-7 16:15:30

              为什么要在一道递归(即使不用递归也可以while从句几行解决)的题目里堆砌ss呢?

            • @ 2023-9-7 16:18:30

              而且恕我直言没能看懂第一个for的含义

            • @ 2023-9-15 14:42:24

              逆天代码,强行搞成高精度

          • 1

          信息

          ID
          316
          时间
          1000ms
          内存
          128MiB
          难度
          4
          标签
          递交数
          446
          已通过
          214
          上传者