任意给定一个正整数N(N<=100),计算2的n次方的值。
输入
输入一个正整数N。
输出
输出2的N次方的值。
样例输入
10
样例输出
1024
分析本质上是一道高精度乘法
先给个投机取巧的
#include#include using namespace std; int main() { int n,m=0; cin>>n; cout< 事实上,这个小程序就可以解决这道题,但要掌握这道题的知识点,必须看高精度的。
我们首先创建一个a数组,赋a[1]=1,a数组的长度l为1,需要注意的是由于是在程序内做的数组,会赋随机值,因此要来一个memset(a,0,sizeof(a));
int a[1005]; memset(a,0,sizeof(a)); a[1]=1; int l=1,s,n;然后弄一个循环,从1~n,再将1~l间的a[i]乘2,随后遍历,发现如果a[i]>9,那么a[i+1]+=a[i]/10,a[i]在mod 10,需要注意如果i+1>l,那么将l赋值为i+1,最后再输出就行了。
cin>>n; for(int k=1;k<=n;k++){ for(int i=1;i<=l;i++){ a[i]*=2; } for(int i=1;i<=l;i++){ s=0; if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10;//这两行可以简化为a[i+1]++,a[i]-=10。 l=max(l,i+1); } } l=max(s,l); } for(int i=l;i>=1;i--){ cout<程序完整程序如下
#include#include using namespace std; int main() { int a[1005]; memset(a,0,sizeof(a)); a[1]=1; int l=1,s,n; cin>>n; for(int k=1;k<=n;k++){ for(int i=1;i<=l;i++){ a[i]*=2; } for(int i=1;i<=l;i++){ s=0; if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10;//这两行可以简化为a[i+1]++,a[i]-=10。 l=max(l,i+1); } } l=max(s,l); } for(int i=l;i>=1;i--){ cout<


![[C++]高精度求2的n次方 [C++]高精度求2的n次方](http://www.mshxw.com/aiimages/31/942240.png)
