我正在尝试使用以下程序来计算“ 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + ... + 2 ^ 14”(我是新手,只能通过自身乘以一定次数来计算指数)。结果应该是32767,但是我运行它并得到270566475,我想了很久,但不知道为什么...
#include <stdio.h>
int main(void)
{
int i, e, exponent, sum;
e = 1;
exponent = 1;
sum = 1;
for (i = 1; i <=14; i++)
{
for (e = 1; e <= i; e++)
{
exponent *= 2;
}
sum += exponent;
}
printf("%d\n", sum);
return 0;
}
那么,这怎么了?谢谢!!!
最佳答案
单独看一下您的内循环。它正在尝试为i
的一个特定值2^i
计算。
但是exponent
并非每次都以1
开头。因此,您进入exponent
已经很大的值进入该循环。
for (i = 1; i <=14; i++)
{
exponent = 1;
for (e = 1; e <= i; e++)
{
exponent *= 2;
}
sum += exponent;
}
现在,您为每个新的2的幂重新设置
exponent
(很明显,它不是指数,而是计算的结果)。