一、题目链接
http://noi.openjudge.cn/ch0106/12/
二、解题思路
◎ 根据题意,乘2的次数为n次;
◎ 从低位到高位,用当前结果的每一位数字乘2,同时加上上一次的进位,形成新的计算结果。
三、代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string>
using namespace std;
//函数定义
//计算2的num次方,num<=100
string gettwopow(int num)
{
string ansstr = ""; //结果字符串
int *ans = new int [40]; //答案存储的数组,逆序排列答案,2的100次方为32位十进制,给40个空间;
for (int i = 1; i <= 40; i++)
{
ans[i - 1] = 0;
}
int weishu = 1; //答案的位数初始为1;
//如果num是1,直接得出2
ans[0] = 2;
//迭代num-1次求出幂
for (int i = 2; i <= num; i++)
{
int jinwei = 0; //进位,默认不进为0
for (int j = 1; j <= weishu; j++)
{
ans[j - 1] = ans[j - 1] * 2 + jinwei;
if (ans[j - 1] >= 10)
{
jinwei = 1;
}
else
{
jinwei = 0;
}
ans[j - 1] = ans[j - 1] % 10;
if (j == weishu && jinwei == 1)
{
weishu++;
}
}
}
for (int i = 1; i <= weishu; i++)
{
ansstr = std::to_string(ans[i - 1]) + ansstr ;
}
delete[] ans;
return ansstr;
}
int main()
{
int n;
cin >> n;
string s0 = gettwopow(n);
cout << s0;
return 0;
}
四、结果:
