舍罕王的失算
#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次?
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;
} 第一,静态变量没初始化默认是0.而其他的是视编译器而定,一般是随机数。
第二,题目是64个格子,每个格子放上2^n个麦子,所有总麦子数是2^1+2^2+2^3......
页:
[1]