鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 10

[已解决]1至100,偶数求和,奇数乘积

[复制链接]
发表于 2020-1-15 13:51:53 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int main()
{
  int sum1 =0,sum2 = 1,i;
  for(i =2;i<=100;i = i+2)
  {sum1 = sum1+i;sum2 = sum2*(i-1);
  }
  printf("偶数和为%d",sum1);
  printf("奇数乘为%d",sum2);
return 0;
}


不懂运行的结果为何如此奇怪……
最佳答案
2020-1-15 13:56:40
数据太大,int 存储不了那么大的数据,所以应把 * 改为 +。试试这样:
#include <stdio.h>
int main()
{
    int sum1 = 0, sum2 = 0, i;
    for (i = 2; i <= 100; i = i + 2)
    {
        sum1 = sum1 + i;
        sum2 = sum2 + (i - 1);
    }
    printf("ou shu: %d\n", sum1);
    printf("ji shu: %d\n", sum2);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-15 13:56:40 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

数据太大,int 存储不了那么大的数据,所以应把 * 改为 +。试试这样:
#include <stdio.h>
int main()
{
    int sum1 = 0, sum2 = 0, i;
    for (i = 2; i <= 100; i = i + 2)
    {
        sum1 = sum1 + i;
        sum2 = sum2 + (i - 1);
    }
    printf("ou shu: %d\n", sum1);
    printf("ji shu: %d\n", sum2);
    return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
ztt一方 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-1-15 13:57:46 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 sunrise085 于 2020-1-15 13:59 编辑

数太大了,应该用long类型
#include <stdio.h>
int main()
{
  int sum1 =0,i;
  long sum2 = 1;
  for(i =2;i<=100;i = i+2)
  {sum1 = sum1+i;sum2 = sum2*(i-1); 
  }
  printf("偶数和为%d\n",sum1);
  printf("奇数乘为%ld\n",sum2);
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 14:05:49 | 显示全部楼层
sunrise085 发表于 2020-1-15 13:57
数太大了,应该用long类型

用 long 类型也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 14:11:50 | 显示全部楼层
本帖最后由 sunrise085 于 2020-1-15 14:17 编辑
zltzlt 发表于 2020-1-15 14:05
用 long 类型也不行


哦哦,刚刚试了一下。还真是啊。那就只能用double了。
#include <stdio.h>
int main()
{
  int sum1 =0,i;
  double sum2 = 1;
  for(i =2;i<=100;i = i+2)
  {sum1 = sum1+i;sum2 = sum2*(i-1); 
  }
  printf("偶数和为%d\n",sum1);
  printf("奇数乘为%.0lf\n",sum2);
return 0;
} 

double类型结果:
偶数和为2550
奇数乘为2725392139750729466213078562747210451819673025574739190472992879946921806921728

long类型的结果
偶数和为2550
奇数乘为5196472710489536419
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 14:21:50 | 显示全部楼层
sunrise085 发表于 2020-1-15 14:11
哦哦,刚刚试了一下。还真是啊。那就只能用double了。

刚刚我又看了一下。double类型能达到这个范围,但是有效数字没这么多位,也就是说上面的结果也是不正确的。double有效数字位为15 – 16位,而这个运算结果有70+位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 14:38:00 | 显示全部楼层

回帖奖励 +1 鱼币

我是来蹭鱼币的。。。。

评分

参与人数 1鱼币 -2 收起 理由
人造人 -2 请不要无意义灌水!

查看全部评分

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

使用道具 举报

发表于 2020-1-15 14:40:32 | 显示全部楼层
sunrise085 发表于 2020-1-15 14:11
哦哦,刚刚试了一下。还真是啊。那就只能用double了。

你这个估计是不对的
1*3*5*7*9  咋乘尾数都是5
s2=1
for x in range(1,101):
  if x%2:
     s2*=x
print("积=",s2)  
e:\pytest>python ex23.py
积= 2725392139750729502980713245400918633290796330545803413734328823443106201171875
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 14:43:56 | 显示全部楼层
wp231957 发表于 2020-1-15 14:40
你这个估计是不对的
1*3*5*7*9  咋乘尾数都是5

嗯嗯,刚刚发上去就发现问题了,见六楼。
C语言中有没有这么大的数字,还能保持精度的,就不知道了。正在看相关资料。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 16:19:13 | 显示全部楼层
Python
sum1=1
sum2=0
for i in range(0,99,2):
    sum1 = sum1 * (i + 1)
    sum2 = sum2 + (i + 2)
print('奇数积:',sum1,'\n','偶数和:',sum2,sep = '')

结果
奇数积:2725392139750729502980713245400918633290796330545803413734328823443106201171875
偶数和:2550
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 19:12:58 | 显示全部楼层
直接long double吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 08:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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