我正在尝试使用以下程序来计算“ 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(很明显,它不是指数,而是计算的结果)。

10-08 05:10