#include <iostream>
#include <string>
#include <cstring>using namespace std;int main() {int n;cin >> n; // 输入一个整数nint arr[100];memset(arr, -1, sizeof(arr)); // 将数组arr的元素初始化为-1,sizeof(arr)表示arr数组的字节大小arr[0] = 1; // 数组第一个元素赋值为1int 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[i] >= 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的元素。
- 程序结束。