法一:
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 }