老牛来学习 发表于 2020-3-26 18:54:39

C语言

#include<stdio.h>


int main()
{
    int i,j;
    double sum = 0,num = 1;
    for(i = 1; i <= 100; i++)
    {
      for(j = 1; j <= i; j++)
      {
            num = num * j;
      }
      sum = sum + num;
    }
    printf("总数是%e",sum);
}



上面这段代码是哪里有错误吗?为什么输出乱码?

BngThea 发表于 2020-3-26 18:57:45

double 类型不能用 %e来输出,请改为 %lf

良弓无箭 发表于 2020-3-26 19:27:14

BngThea 发表于 2020-3-26 18:57
double 类型不能用 %e来输出,请改为 %lf

%lf也不行。在Dev C++上,你那可以?

良弓无箭 发表于 2020-3-26 19:29:03

INF表示超出浮点数表示范围(值溢出);
当值很大或很小时会输出INF:1.0/0.0,-1.0/0.0,0.0+inf=inf;log(0);

BngThea 发表于 2020-3-26 20:10:26

良弓无箭 发表于 2020-3-26 19:27
%lf也不行。在Dev C++上,你那可以?

那就用 %f 试试

墨羽岚 发表于 2020-3-26 20:10:37

你这是超范围了吧{:10_248:}

lovely539351 发表于 2020-3-26 20:17:09

你这外层循环100次每次让内部循环他的阶乘,外部再计算每次循环阶乘的总和
循环阶乘到12就已经快5亿了你着循环这么多怎么可能不超出范围{:5_99:}

sunrise085 发表于 2020-3-26 20:57:58

双层循环,num一直在增大。num最后是100以内所有数的阶乘的乘积,早就撑爆啦!
怎么可能输出正确的结果。

你要计算的是100以内阶乘的和吧?
外层循环需要给num复原为1
#include<stdio.h>
int main()
{
    int i,j;
    double sum = 0,num = 1;
    for(i = 1; i <= 100; i++)
    {
      num=1;
      for(j = 1; j <= i; j++)
      {
            num = num * j;
      }
      sum = sum + num;
    }
    printf("总数是%e",sum);
}
页: [1]
查看完整版本: C语言