《带你学C带你飞》S1E6舍罕王题目求助
《带你学C带你飞》S1E6舍罕王题目我的代码是这样的#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned long long n=0;
for (i=0;i<64;i++)
{
n = n + pow(2,i);
}
printf("舍罕王应该给予达依尔%llu粒麦子!\n",n);
return 0;
}
然后小甲鱼的代码是这样的
#include <stdio.h>
#include <math.h>
int main()
{
unsigned long long sum = 0;
unsigned long long temp;
unsigned long long weight;
int i;
for (i=0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
weight = sum / 25000;
printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);
return 0;
}
我寻思着计算谷子数量的那部分应该没有本质区别,但是为什么小甲鱼的是正确的结果,我跑出来的结果永远是0?
而且我看了一下循环内部的情况,写成这样
#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned long long n=0;
for (i=0;i<64;i++)
{
printf("%llu\n",n);
n = n + pow(2,i);
}
printf("舍罕王应该给予达依尔%llu粒麦子!\n",n);
return 0;
}
最后是结果是这样
向各位请教了。
我分析是pow 默认返回值类型为double而double 无法容纳2的64次方
而单独设置一个变量就相当于强转LLU可以容纳2的64次方 本帖最后由 han125416866 于 2021-8-2 14:36 编辑
可能是数太大溢出了,看看你的编译器 unsigned long long 和double最大是多少吧。 上面说的没错,数据溢出,你可以把64改成67,你就会发现后面全是0 wp231957 发表于 2021-8-2 13:39
我分析是pow 默认返回值类型为double而double 无法容纳2的64次方
而单独设置一个变量就相当于强转 ...
谢谢!
页:
[1]