|  | 
 
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次方 |