鱼C论坛

 找回密码
 立即注册
查看: 915|回复: 7

[已解决]C语言

[复制链接]
发表于 2020-3-26 18:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>


  2. int main()
  3. {
  4.     int i,j;
  5.     double sum = 0,num = 1;
  6.     for(i = 1; i <= 100; i++)
  7.     {
  8.         for(j = 1; j <= i; j++)
  9.         {
  10.             num = num * j;
  11.         }
  12.         sum = sum + num;
  13.     }
  14.     printf("总数是%e",sum);
  15. }
复制代码



上面这段代码是哪里有错误吗?为什么输出乱码?
最佳答案
2020-3-26 20:57:58
双层循环,num一直在增大。num最后是100以内所有数的阶乘的乘积,早就撑爆啦!
怎么可能输出正确的结果。

你要计算的是100以内阶乘的和吧?
外层循环需要给num复原为1
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i,j;
  5.     double sum = 0,num = 1;
  6.     for(i = 1; i <= 100; i++)
  7.     {
  8.         num=1;
  9.         for(j = 1; j <= i; j++)
  10.         {
  11.             num = num * j;
  12.         }
  13.         sum = sum + num;
  14.     }
  15.     printf("总数是%e",sum);
  16. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 18:57:45 | 显示全部楼层
double 类型不能用 %e来输出,请改为 %lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-26 19:27:14 | 显示全部楼层
BngThea 发表于 2020-3-26 18:57
double 类型不能用 %e来输出,请改为 %lf

%lf也不行。在Dev C++上,你那可以?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 19:29:03 | 显示全部楼层
INF表示超出浮点数表示范围(值溢出);
当值很大或很小时会输出INF:1.0/0.0,-1.0/0.0,0.0+inf=inf;log(0);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 20:10:26 | 显示全部楼层
良弓无箭 发表于 2020-3-26 19:27
%lf也不行。在Dev C++上,你那可以?

那就用 %f 试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 20:10:37 | 显示全部楼层
你这是超范围了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 20:17:09 | 显示全部楼层
你这外层循环100次每次让内部循环他的阶乘,外部再计算每次循环阶乘的总和
循环阶乘到12就已经快5亿了你着循环这么多怎么可能不超出范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 20:57:58 | 显示全部楼层    本楼为最佳答案   
双层循环,num一直在增大。num最后是100以内所有数的阶乘的乘积,早就撑爆啦!
怎么可能输出正确的结果。

你要计算的是100以内阶乘的和吧?
外层循环需要给num复原为1
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i,j;
  5.     double sum = 0,num = 1;
  6.     for(i = 1; i <= 100; i++)
  7.     {
  8.         num=1;
  9.         for(j = 1; j <= i; j++)
  10.         {
  11.             num = num * j;
  12.         }
  13.         sum = sum + num;
  14.     }
  15.     printf("总数是%e",sum);
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 01:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表