法一:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=50;
 5 
 6 int main(){
 7     //首先暴力来一遍???
 8     int v,ans[N];
 9     cin>>v;
10     memset(ans,0,sizeof(ans));
11     //将40作为最低位
12     ans[0]=ans[1]=1;
13     //核心算法
14     while(v-->0){
15         for(int i=1;i<=ans[0];i++){
16             ans[i]*=2;
17         }
18         //整理结果
19         for(int i=1;i<=ans[0];i++){
20             ans[i+1]+=ans[i]/10;
21             ans[i]%=10;
22         }
23         if(ans[ans[0]+1]>0)ans[0]++;
24     }
25 
26     for(int i=ans[0];i>0;i--){
27         cout<<ans[i];
28     }
29     return 0;
30 }

法二:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=50;
 5 
 6 void carry(int ans[]){
 7     for(int i=1;i<=ans[0];i++){
 8         ans[i+1]+=ans[i]/10;
 9         ans[i]%=10;
10         if(ans[ans[0]+1]>0){
11             ans[0]++;
12         }
13     }
14 }
15 int main(){
16     //首先暴力来一遍???
17     int v,ans[N];
18     cin>>v;
19     memset(ans,0,sizeof(ans));
20     //将40作为最低位
21     ans[0]=ans[1]=1;
22     //核心算法
23     while(v-->0){
24         for(int i=1;i<=ans[0];i++){
25             ans[i]*=2;
26         }
27         //整理结果
28         if(ans[1]>1e8){
29             carry(ans);
30         }
31     }
32     //最后进位一次
33     carry(ans);
34     //输出结果
35     for(int i=ans[0];i>0;i--){
36         cout<<ans[i];
37     }
38     return 0;
39 }