#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
int n;
cin >> n; // 输入一个整数n
int arr[100];
memset(arr, -1, sizeof(arr)); // 将数组arr的元素初始化为-1,sizeof(arr)表示arr数组的字节大小
arr[0] = 1; // 数组第一个元素赋值为1
int j;
for (int i = 0; i < n; i++) {
j = 0;
// 将数组每个元素乘以2,直到遇到-1为止
while (arr[j] != -1) {
arr[j++] *= 2;
}
j = 0;
// 处理进位
while (arr[j] != -1) {
// 如果当前数字大于等于10,并且下一位是-1(即没有下一位)
// 则在下一位填充0,并将当前位的值除以10加到下一位上
if (arr[j] >= 10 && arr[j + 1] == -1) {
arr[j + 1] = 0;
}
arr[j + 1] += arr[j] / 10;
arr[j] %= 10;
j++;
}
}
// 输出结果
for (int i = j - 1; i >= 0; i--) {
cout << arr[i];
}
return 0;
}
该程序的逻辑如下:
- 首先,从标准输入读取一个整数n。
- 创建一个大小为100的整型数组arr,并用-1进行初始化。
- 将arr数组的第一个元素设置为1。
- 使用变量j来追踪数组arr的索引。
- 使用循环结构,重复n次以下步骤:
- 将j重置为0。
- 使用while循环,将数组arr中的每个元素乘以2,直到遇到-1为止。
- 将j重置为0。
- 使用while循环,处理进位操作,即将大于等于10的值分配给下一位,并取余数赋值给当前位。注意边界情况的处理。
- 使用for循环,从高位到低位输出数组arr的元素。
- 程序结束。