#t215. 计算 2 的幂

计算 2 的幂

计算 2 的幂

题目描述

给定非负整数 n\,n,求 2n\,2^n。

输入格式

一个整数 n (0≤n≤31)\,n\,(0 \le n \le 31)。

输出格式

一个整数,即 2 \,2\,的 n \,n\,次方。

样例输入

3

样例输出

8

提示

这道题有两个新东西:乘方怎么写,以及整数装不下怎么办。

一、^ 不是乘方

C++ 里 ^ 是按位异或(一种二进制运算),不是数学上的乘方:

printf("%d\n", 2 ^ 3);   // 1,不是 8

要算乘方,两种写法:

int a = 2 * 2 * 2;          // 连乘,最快最准
double b = pow(2, 3);       // 需要 <cmath>,返回小数

整数幂优先用连乘:pow 返回 double,数一大就有精度误差,pow(2,30) 可能打出 1073741823 这种差一的值。

二、int 能装多大

int 一般 32 位,范围是:

2^31 = 2147483648 刚好超出,存进去会变成负数(溢出)。这种错误不会报错,只会算出莫名其妙的结果。

三、装不下就用 long long

long long x;                       // 约 ±9.2 × 10^18
scanf("%lld", &x);                 // 读:%lld
printf("%lld\n", x);               // 写:%lld
long long y = 1LL << 40;           // 字面量加 LL 后缀

三个地方必须同时改成 long long / %lld:变量声明、scanf、printf。漏一个就会读错或打错。

四、自检

算完后用估算验证:2^10 ≈ 1000,2^20 ≈ 100 万,2^30 ≈ 10 亿。如果题目 n 能到 30 以上,int 基本都不够,直接上 long long。

  • 先确认结果最大会到多少,再决定变量用什么类型——这是本题真正的考点。
  • 选一种求幂的写法:数学函数、循环累乘、移位都行,但要保证结果类型装得下。

自查:用 n=0(答案 1)和 n=31(2147483648)两个边界自查;后者若输出负数,就是类型溢出了。