鱼C论坛

 找回密码
 立即注册
查看: 2096|回复: 2

[已解决]关于c语言课后作业《数据类型》

[复制链接]
发表于 2020-9-9 13:00:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 街角提子 于 2020-9-9 13:04 编辑

在课后作业中有数麦数的问题,根据提示我照猫画虎进行编程,但编程后的结果是unsigned int的最大值而不是如答案中所说的unsigned long long int的最大值,


我个人的代码如下:
#include <stdio.h>
#include <math.h>

int main()
{
        
        int i;
        unsigned long long  sum;
        unsigned long long  weight;
        unsigned long long  m;
        
        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;
}

请问有人知道为什么吗
最佳答案
2020-9-9 13:48:29
你的sum没有赋初值,再者printf中格式化字符写错了,是%llu,你把小写L写成数字1了,所以结果不对。
另外最好不要用pow,这个函数返回值为浮点数,可能会因为精度问题导致结果不太精确。
#include <stdio.h>

int main()
{
        
    int i;
    unsigned long long  sum=0;
    unsigned long long  weight;
    unsigned long long  m=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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 13:48:29 | 显示全部楼层    本楼为最佳答案   
你的sum没有赋初值,再者printf中格式化字符写错了,是%llu,你把小写L写成数字1了,所以结果不对。
另外最好不要用pow,这个函数返回值为浮点数,可能会因为精度问题导致结果不太精确。
#include <stdio.h>

int main()
{
        
    int i;
    unsigned long long  sum=0;
    unsigned long long  weight;
    unsigned long long  m=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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 13:50:40 | 显示全部楼层
可能是 pow() 函数在转换时出的问题,pow() 输出的是双精度 double 型数据,运算中被自动转换成了 unsigned long long 型了,数据可能造成了丢失。

以上只是猜测,我的系统不支持 long long 型,你自己试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表