ztt一方 发表于 2020-1-15 13:51:53

1至100,偶数求和,奇数乘积

#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;
}


不懂运行的结果为何如此奇怪……

zltzlt 发表于 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;
}

sunrise085 发表于 2020-1-15 13:57:46

本帖最后由 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;
}

zltzlt 发表于 2020-1-15 14:05:49

sunrise085 发表于 2020-1-15 13:57
数太大了,应该用long类型

用 long 类型也不行

sunrise085 发表于 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

sunrise085 发表于 2020-1-15 14:21:50

sunrise085 发表于 2020-1-15 14:11
哦哦,刚刚试了一下。还真是啊。那就只能用double了。




刚刚我又看了一下。double类型能达到这个范围,但是有效数字没这么多位,也就是说上面的结果也是不正确的。double有效数字位为15 – 16位,而这个运算结果有70+位

sanguine_boy 发表于 2020-1-15 14:38:00

我是来蹭鱼币的。。。。

wp231957 发表于 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

sunrise085 发表于 2020-1-15 14:43:56

wp231957 发表于 2020-1-15 14:40
你这个估计是不对的
1*3*5*7*9咋乘尾数都是5



嗯嗯,刚刚发上去就发现问题了,见六楼。
C语言中有没有这么大的数字,还能保持精度的,就不知道了。正在看相关资料。

Andy99 发表于 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

黑猫的猫 发表于 2020-1-15 19:12:58

直接long double吧
页: [1]
查看完整版本: 1至100,偶数求和,奇数乘积