我参加了Codility.com demo test。
我的程序在一个单元测试中返回了错误的值:
TEST extreme_large_numbers 测试算术溢出的极大数序列。 TIME 0.056 秒。 RESULT 错误答案 得到2,但它不是平衡点,sum[0..1]=4294967294,sum[3..3]=-2
好的,由于一开始我无法看到代码中的问题,所以我尝试在Visual Studio项目中运行它。然后编译器发现
然而,演示测试不允许您更改函数输入/返回类型为
我的程序在一个单元测试中返回了错误的值:
TEST extreme_large_numbers 测试算术溢出的极大数序列。 TIME 0.056 秒。 RESULT 错误答案 得到2,但它不是平衡点,sum[0..1]=4294967294,sum[3..3]=-2
好的,由于一开始我无法看到代码中的问题,所以我尝试在Visual Studio项目中运行它。然后编译器发现
4294967294
对于int
来说太大了。它需要是uint
或long
。因此,我将所有内容更改为long
,在VS中运行成功。然而,演示测试不允许您更改函数输入/返回类型为
long
。
- 2,147,483,647(最大的带符号32位整数)
- 4,294,967,294(Codility.com单元测试给出的数字)
请问有人能解释一下,如果一个int[]
中的数据值为4294967294
,这个程序怎么可能正常工作?
2147483647 * 2 = 4294967294
他们故意让int
数据类型溢出了 :( - JohnB