在上个月的挑战中,我必须避免造成溢出错误可能导致其他复杂情况的情况。实际上,基于Miller-Rabin的模幂运算算法 isPrime 编写例程来避免此问题。无论使用哪种编程语言,都不可避免地会遇到此问题。当您尝试执行需要更多位数以表示结果的操作时,会发生溢出错误。当使用大整数时,通常但并非唯一地发生这种情况。例如,尝试以下示例:
//Example 1
x = 9007199254740992;
For(i=1,i<=10,i++,Print(x+i));
x = 9007199254740992;
For(i=1,i<=10,i++,Print(x-i));
//Example 2
n1 = 9007199254740999;
n2 = 1;
Print(n1-n2);
2 53 是溢出发生之前JMP可以表示的最大整数。这是浮点表示的一个很好的解释 (JMP中的所有数字都是浮点数)。对于本月的挑战,我希望看到您提出了一些用于加减法的方法,这些方法会使JMP的整数表示溢出。创建两个功能
- 减去大 ( n1 , n2 )哪里 n1 和 n2 均为文本形式的整数(正数,负数或0)。返回文本形式的值。
- addBig ( n1 ,< n2 >)在哪里
n1 –文本形式的整数,或者,如果 n2 为空,是文本形式的整数列表(正数,负数或0)。
n2 –文本形式的整数
返回文本形式的值。
例子:
减去大 (“ 9007199254740999”,“ 9007199254740998”)返回“ 1”
addBig (“ 9007199254740992”,“ 7”)返回“ 9007199254740999”
addBig ({“ 9007199254740999”,“-1”,“ 11”})返回“ 9007199254741009”
计分 :
- 一个版本的5点 addBig 可以1)在30秒内将两个最多1000个数字相加,以及2)在30秒内找到一个包含最多100个100位数字的列表的和。第1部分)将使用10套不同的数字进行测试。每个数字中的位数不一定相同。同一组10份将用于所有提交。
- 3个其他要点减去大 ,必须在30秒以内计算(x – y),其中x和y是至多1000个数字。将使用十组不同的数字。每个数字的位数不一定相同。同一组10份将用于所有提交。
- 3点奖励积分 addBig 可以正确添加最大位数(位数)的提交 n1 和 n2 长度相等,不到5秒。(2分2 nd ,其中1个代表3 rd )
- 3点奖励积分 addBig 可以在5秒内正确添加最多1000位数字的提交(2分代表2 nd ,每3点可得1分 rd )。
- 如果任何提交的内容与JMP工作人员的提交内容一样快或更快,则每个加3分。
提交截止时间为美国东部时间(美国东部时间)6月15日星期一晚上11:59 日 。祝好运!