在上個月的挑戰中,我必須避免造成溢出錯誤可能導致其他復雜情況的情況。實際上,基於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 日 。祝好運!