鱼C论坛

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

[已解决]舍罕王的失算

[复制链接]
发表于 2019-9-21 15:16:25 | 显示全部楼层 |阅读模式
2鱼币
#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&#9834;(&#65381;ω&#65381;)&#65417;
#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;
}

最佳答案

查看完整内容

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进行运算,然后再++”) 测试用代码如下,修改部分 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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&#9834;(&#65381;ω&#65381;)&#65417;
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-21 17:24:39 | 显示全部楼层
第一,静态变量没初始化默认是0.而其他的是视编译器而定,一般是随机数。
第二,题目是64个格子,每个格子放上2^n个麦子,所有总麦子数是2^1+2^2+2^3......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 09:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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