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;
}
不懂运行的结果为何如此奇怪…… 数据太大,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: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;
} sunrise085 发表于 2020-1-15 13:57
数太大了,应该用long类型
用 long 类型也不行 本帖最后由 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:11
哦哦,刚刚试了一下。还真是啊。那就只能用double了。
刚刚我又看了一下。double类型能达到这个范围,但是有效数字没这么多位,也就是说上面的结果也是不正确的。double有效数字位为15 – 16位,而这个运算结果有70+位 我是来蹭鱼币的。。。。 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
wp231957 发表于 2020-1-15 14:40
你这个估计是不对的
1*3*5*7*9咋乘尾数都是5
嗯嗯,刚刚发上去就发现问题了,见六楼。
C语言中有没有这么大的数字,还能保持精度的,就不知道了。正在看相关资料。 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 直接long double吧
页:
[1]