题目描述
任意给定一个正整数N(N≤100),计算2的n次方的值。
输入格式
输入一个正整数N。
输出格式
输出2的N次方的值。
输入输出样例
输入样例1:
5
输出样例1:
32
代码思路
2的N次方,n是小于一百的,但累乘器很快会超long long,所以要用高精度乘法;
高精度乘法有高精度乘高精度或高精度乘低精度;
本题数字2为低精度
所以要用高精度乘低精度
满分代码
#include<bits/stdc++.h>
using namespace std;
const int N=100*100;
int a[N],b[N],c[N];
string mt(string as,int n){
string cs;
//0清空数组
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
//1求长度
int al=as.size();
long long cl=al;
//2逆序存储
for(int i=1;i<=al;i++) a[i]=as[al-i]-'0';//正序
//3模拟乘法竖式
for(int i=1;i<=al;i++){//到al
c[i]+=a[i]*n;
c[i+1]+=c[i]/10;
c[i]%=10;
}
//3.5处理最高位
int t=c[cl+1];
while(t){
cl++;
c[cl]=t%10;
t/=10;
}
//4去除前导0
while(c[cl]==0&&cl>1) cl--;
//5拼接答案
for(int i=cl;i>=1;i--) cs+=c[i]+'0';//逆序
return cs;
}
int main(){
int n;
string cum="1";/初始化为1
cin>>n;
for(int i=1;i<=n;i++){
cum=mt(cum,2);///不是*=
}
cout<<cum;
return 0;
}