c语言克服者 发表于 2020-1-26 22:52:16

程序和答案一样,为何结果不同?!初学者求助!

这个是《带你学c带你飞》第六课作业的最后一个题
题目要求是:相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8 * 8 共 64 格的象棋说:“陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格放 1 粒,第 2 格放 2 粒,第三格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘 64 格,我就感激不尽了。”。舍罕王听了达依尔这个“小小”的要求,想都没想就满口答应下来。
结果在给达依尔麦子时舍罕惊奇地发现要给的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。请问,舍罕王要兑现他的许诺共要多少粒麦子赏赐他的宰相?如果每25000粒麦子重1kg,那么舍罕王应该给予达依尔多少公斤麦子?
这个是答案代码
#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;
}
这个是我的代码
#include <stdio.h>
#include <math.h>
int main()
{
        int i;
        unsigned long long weight;
        unsigned long long sum=0;
        unsigned long long temp;
        for(i=0;i<64;i++)
        {
                temp=pow(2,i);
                sum=sum+temp;
        }
        weight=sum/25000;
        printf("舍罕王给予达依尔%11u粒麦子!\n",sum);
        printf("如果每25000粒麦子为1kg,那么应该给%11u公斤麦子!\n",weight);
        return 0;
}
怎么看都是一样的啊,为什么运行出来结果不对呢?(绿色字体图片是答案运行出来的结果,另一个是我的)

还有一个问题,对于使用unsigned long long int还有long long int, long int之类的,我只知道是一个范围大小的区别,那什么时候选择哪个该怎么判断?多大数值用哪个有范围或者对应吗?

ba21 发表于 2020-1-26 23:02:59

一不小心就会给你唬到

%11u %llu

c语言克服者 发表于 2020-1-26 23:22:46

ba21 发表于 2020-1-26 23:02
一不小心就会给你唬到

%11u %llu

谢谢!!我太傻了。。。

chxchxkkk 发表于 2020-1-28 15:12:40

哈哈
页: [1]
查看完整版本: 程序和答案一样,为何结果不同?!初学者求助!