3 条题解

  • 1
    @ 2025-2-22 11:55:46

    加个高精

    #include <bits/stdc++.h>
    using namespace std;
    int ans[100001];
    int main() {
        int n;
        cin >> n;
        
        memset(ans, 0, sizeof(ans));
        ans[0] = 1; // 位数
        ans[1] = 2;
        for (int i = 2; i <= n; ++i) {
            for (int j = 1; j <= ans[0]; ++j) {
                ans[j] *= 2;
            }
            
            ans[1] += 2;
            
            for (int j = 1; j <= ans[0]; ++j) {
                ans[j + 1] += ans[j] / 10;
                ans[j] %= 10;
            }
            
            if (ans[ans[0] + 1] != 0) {
                ans[0]++;
            }
        }
        for (int i = ans[0]; i >= 1; --i) {
            cout << ans[i];
        }
    }
    
    • -1
      @ 2023-5-13 10:44:34

      如果只有n个塔,最少次数是2^n-1。那么2n个塔代入进去就是2*(2^n-1)

      先计算2^n-1再*2未免麻烦,拆括号后可得到2^(n+1)-2,计算代码可以借鉴P1194

      const int N=1e5+10;
      int a[N],n,len=1;
      int main(){
      	cin>>n;
      	a[1]=1;
      	for(int i=1;i<=n+1;i++){
      		for(int j=1;j<=len;j++)a[j]*=2;
      		for(int j=1;j<=len;j++){
      			a[j+1]+=a[j]/10;
      			a[j]%=10;
      		}
      		if(a[len+1]>0)len++;
      	}
          a[1]-=2;//一般要判断是否要借位,但2^(n+1)(n>=1)易得个位必然大于等于2
      	for(int i=len;i>=1;i--)cout<<a[i];
      	return 0;
      }
      
      • -2
        @ 2022-1-9 15:45:16
        #include<iostream>
        #include<cstring>
        using namespace std;
        
        int main()
        {
            int a[1000];
            int n;
            while(cin>>n)
            {
                memset(a,0,sizeof(a));
                a[0]=2;
                if(n==1)
                {
                    cout<<2<<endl;
                    continue;
                }
                int len=1;
                n--;
                while(n--)
                {
                    int x=0;
                    for(int i=0;i<len;i++)
                    {
                        a[i]=a[i]*2+x;
                        if(i==0)
                            a[i]+=2;
                        x=a[i]/10;
                        a[i]%=10;
                    }
                    a[len]+=x;
                    if(a[len])
                        len++;
                }
        
                for(int i=len-1;i>=0;i--)
                    cout<<a[i];
                cout<<endl;
            }
            return 0;
        }
        
        • 1

        信息

        ID
        694
        时间
        1000ms
        内存
        128MiB
        难度
        5
        标签
        递交数
        82
        已通过
        32
        上传者