任意给定一个正整数 N(N≤100),计算 2 的 N 次方的值。
输入格式
输入一个正整数 N。
输出格式
输出 2 的 N 次方的值。
提示
高精度计算。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
5
样例输出
32
0、解释
数字太大,不能用基本数据类型,利用数组来计算,java开挂,c++好可怜
1、定义头文件
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
2、定义数据
char ans[10000];
int d = 10000;
int n;
3、输入数据
cin >> n;
4、归为-1
memset(ans, -1, 10000);
5、第一个设为2
ans[0] = 2;
6、循环乘上n次
for (int i = 1; i < n; i++) {
}
7、在6内添加乘法逻辑
for (int i = 1; i < n; i++) {
for (int j = 0; ans[j] != -1; j++) {
ans[j] *= 2;
}
}
8、在6内添加进位逻辑
- 不是-1时,也就是有数字时,进行判断
- 如果大于9,则进位
- 这一位对10取余,下一位对10取整
for (int i = 1; i < n; i++) {
for (int j = 0; ans[j] != -1; j++) {
ans[j] *= 2;
}
for (int j = 0; ans[j] != -1; j++) {
if (ans[j] > 9) {
if (ans[j + 1] == -1) {
ans[j + 1] = 0;
}
ans[j + 1] += ans[j] / 10;
ans[j] %= 10;
}
}
}
9、要反向输出,计算有多少位
int sum = 0;
for (int i = 0; ans[i] != -1; i++) {
sum++;
}
10、根据位数,倒叙输出
for (int i = sum - 1; i >= 0; i--) {
cout << (char)(ans[i] + '0');
}
11、return 0
return 0;
完整代码
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
char ans[10000];
int d = 10000;
int n;
int main() {
cin >> n;
memset(ans, -1, 10000);
ans[0] = 2;
for (int i = 1; i < n; i++) {
for (int j = 0; ans[j] != -1; j++) {
ans[j] *= 2;
}
for (int j = 0; ans[j] != -1; j++) {
if (ans[j] > 9) {
if (ans[j + 1] == -1) {
ans[j + 1] = 0;
}
ans[j + 1] += ans[j] / 10;
ans[j] %= 10;
}
}
}
int sum = 0;
for (int i = 0; ans[i] != -1; i++) {
sum++;
}
for (int i = sum - 1; i >= 0; i--) {
cout << (char)(ans[i] + '0');
}
return 0;
}