题目描述:
任意给定一个正整数N(N<=100),计算2的n次方的值。
输入:
输入一个正整数N。
输出:
输出2的N次方的值。
输入样例:
5
输出样例:
32
题目分析:
学过数学都知道嘛,指数型增长的很快,函数图像都是咻一下就上去了,即便题目给的n范围看着很小,也不能被迷惑哦,所以int型或long long型都是不可取的,还是会用到高精度算法,不过也不用担心,其实就是n个2相乘,区区单精度乘高精度,轻松拿捏。
做题思路:
首先就是根据题意读取一个整数n,定义一个数组a,用于存放各个位数,再定义一个m作为运算后整数的位数,既然是n次方,肯定要有一个执行n次的循环,有m位,就要对m个位数依次乘2。为了方便运算,我们依旧是倒序存放,以最左边为个位。循环结束后倒序输出。
具体代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,a[100000]={0};
cin>>n;
a[0]=1;//初始值为1
int m=1;//m为每次运算后整数的位数,初始为1
for(int i=1;i<=n;i++){
int jw=0;//进位
for(int j=0;j<m;j++){//整数倒序存放,最左边为个位
int t=jw+a[j]*2;
a[j]=t%10;
jw=t/10;
}
if(jw>0) a[m++]=jw;//若最后一次进位不为0,位数加一,并存储进位
}
for(int i=m-1;i>=0;i--){//倒序输出
cout<<a[i];
}
return 0;
}
还有什么不理解的,欢迎来评论区讨论,或者私信问我也可以!