s1e6中的最后一个动动手问题。
小甲鱼说最后结果也并非正确答案,因为数值大到unsigned long long也不够用,但当我知道float和double取值范围那么大时,我想如果把数据类型改为float,或许就能做出来了。{:10_257:}#include <stdio.h>
#include <math.h>
int main()
{
float sum =0;
float temp;
float weight;
int i;
for (i = 0; i < 64; i++)
{
temp = pow(2,i);
sum = sum + temp;
}
weight = sum / 25000;
printf("舍罕王应该给予达依尔%f粒麦子\n",sum);
printf("如果每25000粒麦子为1kg,那么应该给%f公斤麦子!\n",weight);
return 0;
}
{:10_281:}咦?结果比小甲鱼的大,而且小于float取值的最大值,难道说这就是正确答案?{:10_279:} 最可靠的做法应该是用 double :
#include <stdio.h>
#include <math.h>
int main()
{
double sum = 0;
double temp;
double weight;
int i;
for (i = 0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
weight = sum / 25000;
printf("舍罕王应该给予达依尔%lf粒麦子\n", sum);
printf("如果每25000粒麦子为1kg,那么应该给%lf公斤麦子!\n", weight);
return 0;
} zltzlt 发表于 2020-3-4 14:26
最可靠的做法应该是用 double :
我也是这样写的,但是答案比起小甲鱼给的多一粒,然而仔细一想,2的幂次方从0加到63不就是2的64次方-1嘛,所以小甲鱼的答案应该是对的(虽然他自己说是错了),我特别搞不明白为什么用double写的会比用unsigned long long 要多1粒。请问你了解原因吗?
页:
[1]