关于带你学C带你飞s1e6课后作业的问题
本帖最后由 喝水大王 于 2018-7-5 15:14 编辑#include <stdio.h>
#include <math.h>
int main()
{
unsigned long long sum=0;
int i;
for (i=0;i<64;i++)
{
sum=sum+pow(2,i);
printf("%llu %d\n",sum,i);
}
printf("一共需要%llu kg\n",(sum/25000));
return 0;
}
每次循环都打印出sum的值以此验证,当i=63的时候,sum的值为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;
}
溢出? BngThea 发表于 2018-7-5 15:12
溢出?
答案的结果就不会溢出{:10_266:} 喝水大王 发表于 2018-7-5 15:15
答案的结果就不会溢出
你可以先将/25000放到循环里面试试 pow函数的返回值是double型,楼主的程序中sum=sum+pow(2,i);是unsigned long long和double两个不同数据类型之间相加;
答案中是先定义了unsigned long long型的temp变量,是将pow函数的返回值赋值给为unsigned long long类型的变量,相当于强制转换,最终是两个unsigned long long数据类型相加,所以后者输出的是正确答案 楼主可以将自己程序中的“sum=sum+pow(2,i);”改为“sum = sum +(unsigned long long)pow(2,i) ;” DadingVIP 发表于 2018-7-5 18:50
pow函数的返回值是double型,楼主的程序中sum=sum+pow(2,i);是unsigned long long和double两个不同数据类型 ...
感谢解答{:10_254:}
页:
[1]