自学Python:国王给象棋发明者的奖励

相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依次放完棋盘上的64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请编程求出国王总共需要将多少麦子赏赐给他的宰相。
这就是个经典的复利的故事,算法很简单,棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依次放完棋盘上的64格。现在用一个复利公式很容易就计算出来了。那用python代码试着计算一下,一共是多少?
下面直接上代码:
########################
if __name__=="__main__":
# 使用循环求累加和
i = 1
zongshu = 0.0
while i <= 64:
zongshu = zongshu + 2**(i-1)
print("第" , i ,'格需要给的总数', "=" , int(zongshu))
i += 1
print("国王总共需要赏赐给宰相的麦子数为:\n%f\n" %zongshu)
########################
执行结果如下:
第 1 格需要给的总数 = 1
第 2 格需要给的总数 = 3
第 3 格需要给的总数 = 7
第 4 格需要给的总数 = 15
第 5 格需要给的总数 = 31
第 6 格需要给的总数 = 63
第 7 格需要给的总数 = 127
第 8 格需要给的总数 = 255
第 9 格需要给的总数 = 511
第 10 格需要给的总数 = 1023
第 11 格需要给的总数 = 2047
第 12 格需要给的总数 = 4095
第 13 格需要给的总数 = 8191
第 14 格需要给的总数 = 16383
第 15 格需要给的总数 = 32767
第 16 格需要给的总数 = 65535
第 17 格需要给的总数 = 131071
第 18 格需要给的总数 = 262143
第 19 格需要给的总数 = 524287
第 20 格需要给的总数 = 1048575
第 21 格需要给的总数 = 2097151
第 22 格需要给的总数 = 4194303
第 23 格需要给的总数 = 8388607
第 24 格需要给的总数 = 16777215
第 25 格需要给的总数 = 33554431
第 26 格需要给的总数 = 67108863
第 27 格需要给的总数 = 134217727
第 28 格需要给的总数 = 268435455
第 29 格需要给的总数 = 536870911
第 30 格需要给的总数 = 1073741823
第 31 格需要给的总数 = 2147483647
第 32 格需要给的总数 = 4294967295
第 33 格需要给的总数 = 8589934591
第 34 格需要给的总数 = 17179869183
第 35 格需要给的总数 = 34359738367
第 36 格需要给的总数 = 68719476735
第 37 格需要给的总数 = 137438953471
第 38 格需要给的总数 = 274877906943
第 39 格需要给的总数 = 549755813887
第 40 格需要给的总数 = 1099511627775
第 41 格需要给的总数 = 2199023255551
第 42 格需要给的总数 = 4398046511103
第 43 格需要给的总数 = 8796093022207
第 44 格需要给的总数 = 17592186044415
第 45 格需要给的总数 = 35184372088831
第 46 格需要给的总数 = 70368744177663
第 47 格需要给的总数 = 140737488355327
第 48 格需要给的总数 = 281474976710655
第 49 格需要给的总数 = 562949953421311
第 50 格需要给的总数 = 1125899906842623
第 51 格需要给的总数 = 2251799813685247
第 52 格需要给的总数 = 4503599627370495
第 53 格需要给的总数 = 9007199254740991
第 54 格需要给的总数 = 18014398509481984
第 55 格需要给的总数 = 36028797018963968
第 56 格需要给的总数 = 72057594037927936
第 57 格需要给的总数 = 144115188075855872
第 58 格需要给的总数 = 288230376151711744
第 59 格需要给的总数 = 576460752303423488
第 60 格需要给的总数 = 1152921504606846976
第 61 格需要给的总数 = 2305843009213693952
第 62 格需要给的总数 = 4611686018427387904
第 63 格需要给的总数 = 9223372036854775808
第 64 格需要给的总数 = 18446744073709551616
国王总共需要赏赐给宰相的麦子数为:
18446744073709551616.000000
最后的总数非常恐怖,即使把国家所有的麦子拿过来,都还不够。
________________END______________