4 条题解

  • 0
    @ 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
        @ 2024-1-30 11:17:33
        
        
        • -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
          标签
          递交数
          81
          已通过
          31
          上传者