yixinwenxin 发表于 2019-9-21 15:16:25

舍罕王的失算

#include<stdio.h>
#include<math.h>
int main()
{
        unsigned long long int sum=0;
        unsigned long long int temp;
        unsigned long long int weight;
        unsigned 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公斤麦子!",weight);
        return 0;
}

第一 unsigned long long int sum = 0;这个0存在的意义是什么?默认情况不是空 0 吗?
第二        for(i=0;i<64;i++)
        {
                temp=pow(2,i);
                sum=sum+temp;
        }
这个循环的意思是一下意思
i   循环64次依次累加
i   第一次循环
temp=2^1
sum=0+2^1
i   第二次循环
temp=2^2
sum=0+(2^1)+(2^2)
依此循环64次?

自然 发表于 2019-9-21 15:16:26

1、将“unsigned long long int sum = 0”改为“unsigned long long int sum”后输出“sum”的值可以发现“sum = 1”,默认情况下并不是“0”。
2、在for循环中添加“printf("%llu\n",i);”将每次循环的“i”值输出可以发现“i”为从“0”到“63”,即:第一次循环为:temp = 2^0;sum = 0+2^0。第二次循环为:temp = 2^1;sum = 0+2^0+2^1。……
(注:“i++”的意思是“先用i进行运算,然后再++”)
测试用代码如下,修改部分加了“//******”,
萌新求勿喷Thanks♪(・ω・)ノ
#include<stdio.h>
#include<math.h>
int main()
{
      unsigned long long int sum;//******
      unsigned long long int temp;
      unsigned long long int weight;
      unsigned int i;
      printf("%llu\n",sum);//******
      for(i=0;i<64;i++)
      {
                temp=pow(2,i);
                sum=sum+temp;
                printf("%llu\n",i);//*****
      }
      weight=sum/25000;
      printf("舍罕王应该给与达依尔%llu粒麦子\n",sum);
      printf("如果没25000粒麦子为1kg,那么应该给%llu公斤麦子!",weight);
      return 0;
}

百里狂生 发表于 2019-9-21 17:24:39

第一,静态变量没初始化默认是0.而其他的是视编译器而定,一般是随机数。
第二,题目是64个格子,每个格子放上2^n个麦子,所有总麦子数是2^1+2^2+2^3......
页: [1]
查看完整版本: 舍罕王的失算