题目很简单,就是求 2 的 n 次方。但 n 的范围是 1~1000。注意,当 n > 64 时,结果已经超过 long long int 的最大值。
这道题目的结果可以使用数组来存储结果,过程就像平常在草稿纸上摆竖式计算乘法一样,如果数组中某个元素大于 9, 就向前进位。
#include<stdio.h>
#include<string.h>
#define SIZE 1000
int main(){
int data[SIZE];
int n, k;
scanf("%d", &n);
memset(data, 0, SIZE*sizeof(int));
data[0] = 1;
for(int i = 0; i < n; i++){
for(int j = 0; j < SIZE; j++){
data[j] *= 2;
}
for(int j = 0; j < SIZE; j++){
if(data[j] > 9){
data[j] %= 10;
data[j + 1]++;
}
}
}
for(int i = SIZE - 1; i >= 0; i--){
if(data[i] != 0){
k = i;
break;
}
}
for(int i = k; i >= 0; i--){
printf("%d", data[i]);
}
printf("\n");
}