|
5鱼币
《带你学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次方
|
-
最佳答案
查看完整内容
我分析是 pow 默认返回值类型为double 而double 无法容纳2的64次方
而单独设置一个变量 就相当于强转 LLU可以容纳2的64次方
|