清淤清宇 发表于 2020-7-3 11:29:36

萌新,帮帮孩子吧

这是咋回事呢,为什么我就算不到结果?求大佬解惑。

wp231957 发表于 2020-7-3 11:36:40

2的64次幂太大了,ull也装不下

永恒的蓝色梦想 发表于 2020-7-3 11:43:08

if 改成 while

qiuyouzhi 发表于 2020-7-3 11:48:58

怎么变成if (i < 64)了..这样只会执行一次
改成while (i < 64)
还有,结果连unsigned long long也装不下的,所以输出的结果并不是最终答案。

永恒的蓝色梦想 发表于 2020-7-3 12:08:36

qiuyouzhi 发表于 2020-7-3 11:48
怎么变成if (i < 64)了..这样只会执行一次
改成while (i < 64)
还有,结果连unsigned long long也装不下 ...

结果是 unsigned long long 的最大值,能装下。

赚小钱 发表于 2020-7-3 12:11:13

if -> while
pow -> powl

qiuyouzhi 发表于 2020-7-3 12:13:52

永恒的蓝色梦想 发表于 2020-7-3 12:08
结果是 unsigned long long 的最大值,能装下。

你或许理解错我意思了?
其实这里计算得到的麦子数(18446744073709551615 )并非正确的结果,因为 unsigned long long 能够表示最大的数字是 18446744073709551615,你看,连 C 语言也无能为力了……

永恒的蓝色梦想 发表于 2020-7-3 12:43:18

qiuyouzhi 发表于 2020-7-3 12:13
你或许理解错我意思了?

你   确   定   ?>>> sum(pow(2, i) for i in range(64))
18446744073709551615

jhanker 发表于 2020-7-3 13:34:26

wp231957 发表于 2020-7-3 11:36
2的64次幂太大了,ull也装不下

大数需要知己想办法把数据存储掉,可以参看:
https://fishc.com.cn/thread-173377-1-1.html

清淤清宇 发表于 2020-7-3 16:53:53

qiuyouzhi 发表于 2020-7-3 11:48
怎么变成if (i < 64)了..这样只会执行一次
改成while (i < 64)
还有,结果连unsigned long long也装不下 ...

谢谢

清淤清宇 发表于 2020-7-3 16:54:24

永恒的蓝色梦想 发表于 2020-7-3 11:43
if 改成 while

多谢指点

qiuyouzhi 发表于 2020-7-3 16:54:30

清淤清宇 发表于 2020-7-3 16:53
谢谢

如果问题解决了,就设个最佳答案吧~

清淤清宇 发表于 2020-7-4 08:28:51

qiuyouzhi 发表于 2020-7-3 16:54
如果问题解决了,就设个最佳答案吧~

新人,怎么设置最佳答案啊

qiuyouzhi 发表于 2020-7-4 08:31:20

清淤清宇 发表于 2020-7-4 08:28
新人,怎么设置最佳答案啊

额,你这个求助帖发错格式了..应该是问题求助类型发出来
你却搞了个空类型,这次就算了吧

damon2009a 发表于 2020-7-7 10:51:06

有许多问题;1:if改成while,if语句只执行一次,要改成while语句
2:unsigned long long int 装不下pow(2,64),

嘉岳呀 发表于 2020-7-9 20:54:13

改成while(i < 64)
页: [1]
查看完整版本: 萌新,帮帮孩子吧