繁体   English   中英

C 中的循环问题

[英]Problem with loop in C

我正在尝试使用以下程序计算“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;
}

所以这有什么问题??? 谢谢!!!

您不需要内部循环。 只需执行一次exponent *= 2 ,直接在外循环内。 顺便说一句,我认为您必须sum +=...之后执行此操作。

此外,您可以从sum = 0i = 0开始,这更接近您描述的数学。

看看你的内部循环本身。 它试图为i的一个特定值计算2^i

exponent并非每次都从1开始。 所以你 go 进入那个循环, exponent已经非常大了。

for (i = 1; i <=14; i++)
{
    exponent = 1;
    for (e = 1; e <= i; e++)
    {
        exponent *= 2;
    }

    sum += exponent;
}

现在您已经为每个 2 的新幂重置了exponent (要清楚,这根本不是指数,而是计算结果)。

如果您有权创建 function,最好使用递归 function 来执行此操作:

#include <stdio.h>

int power(int x, int exp) {
    if (exp == 0)
        return 1;
    else
        return x * power(x, exp-1);
}

int main (int argc, const char * argv[])
{
    int i;
    int sum = 0;
    for (i = 0; i <= 14; i++) {
        sum += power(2, i);
    }

    printf("%d",sum);
    return 0;
}

我希望它有所帮助。

您只需要一个循环,因为每个循环都已经有了 n-1 值的结果。 我已经更正了你的代码,它可以工作。

#include <stdio.h>

int main (int argc, const char * argv[])
{
    int i, e, exponent, sum;

    e = 1;
    exponent = 1;
    sum = 1;

    for (i = 1; i <= 14; i++)
    {
        exponent *= 2;
        sum += exponent;
    }

    printf("%d\n", sum);

    return 0;
}

两种代码都有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM