关于c语言课后作业《数据类型》
本帖最后由 街角提子 于 2020-9-9 13:04 编辑在课后作业中有数麦数的问题,根据提示我照猫画虎进行编程,但编程后的结果是unsigned int的最大值而不是如答案中所说的unsigned long long int的最大值,
我个人的代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned long longsum;
unsigned long longweight;
unsigned long longm;
for(i=0;i<64;i++)
{
m=pow(2,i);
sum=sum+m;
}
weight=sum/25000;
printf("舍罕王应该给达伊尔%11u的麦子,\n\
如果每25000粒麦子为1kg,那么应该给达伊尔%11u",sum,weight);
return 0;
}
请问有人知道为什么吗 你的sum没有赋初值,再者printf中格式化字符写错了,是%llu,你把小写L写成数字1了,所以结果不对。
另外最好不要用pow,这个函数返回值为浮点数,可能会因为精度问题导致结果不太精确。
#include <stdio.h>
int main()
{
int i;
unsigned long longsum=0;
unsigned long longweight;
unsigned long longm=1;
for(i=0;i<64;i++)
{
sum=sum+m;
m=m*2;
}
weight=sum/25000;
printf("舍罕王应该给达伊尔%llu的麦子,\n\
如果每25000粒麦子为1kg,那么应该给达伊尔%llukg",sum,weight);
return 0;
} 可能是 pow() 函数在转换时出的问题,pow() 输出的是双精度 double 型数据,运算中被自动转换成了 unsigned long long 型了,数据可能造成了丢失。
以上只是猜测,我的系统不支持 long long 型,你自己试试看
页:
[1]