|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8 * 8 共 64 格的象棋说:“陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格放 1 粒,第 2 格放 2 粒,第三格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘 64 格,我就感激不尽了。”。舍罕王听了达依尔这个“小小”的要求,想都没想就满口答应下来。
结果在给达依尔麦子时舍罕惊奇地发现要给的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。请问,舍罕王要兑现他的许诺共要多少粒麦子赏赐他的宰相?如果每25000粒麦子重1kg,那么舍罕王应该给予达依尔多少公斤麦子?
这个课后题,我这个数学鬼才一开始曲解了意思,算的是从第三格2*2=4粒开始,第四格放4*4=16粒,第五格放16*16=256粒,第六格放256*256=65536粒,以此类推.....
然后我的代码是这样的:
#include <stdio.h>
#include <math.h>
int main()
{
unsigned long long int sum = 3;
unsigned long long int temp = 2;
unsigned long long int weight;
int i = 1;
while(i < 63)
{
temp = pow(temp, 2);
sum = sum + temp;
i++;
}
printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
return 0;
}
但是得出的结果是:舍罕王应该给予达依尔4295033111粒麦子!
unsigned long long 能够表示最大的数字是 18446744073709551615,按理说我这样应该比正确答案还要多鸭?也应该是18446744073709551615呀,可是为什么反而得出的数那么短呢。。。
- #include <stdio.h>
- #include <math.h>
- int main(void)
- {
-
- unsigned long long int sum = 3;
- unsigned long long int temp = 2;
- unsigned long long int weight;
- int i = 1;
-
- while(i < 63)
- {
-
- temp = pow(temp, 2);
- printf("%llu\n", temp);
- sum += temp;
-
- i++;
- }
-
- printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
-
- return 0;
-
- }
复制代码
抱歉啊,刚才我傻了
你看这段代码最大的结果,它乘上去之后
就太大了,temp装不下,就只能为0 
|
|