先月の課題では、オーバーフローエラーによってさらに複雑になる可能性がある状況を回避する必要がありました。実際、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の整数表現をオーバーフローさせる数値を加算および減算する方法を考えてもらいたいと思います。2つの関数を作成する
- subtractBig ( n1 、 n2 ) どこ n1 そして n2 両方ともテキスト形式の整数(正、負、または0)です。値をテキスト形式で返します。
- addBig ( n1 、< n2 >)どこ
n1 –テキスト形式の整数、または n2 空、テキスト形式の整数(正、負、または0)のリスト。
n2 –テキスト形式の整数
値をテキスト形式で返します。
例:
subtractBig (「9007199254740999」、「9007199254740998」)は「1」を返します
addBig (「9007199254740992」、「7」)は「9007199254740999」を返します
addBig ({“ 9007199254740999”、”-1”、” 11”})は“ 9007199254741009”を返します
得点 :
- バージョンの5ポイント addBig これは、1)30秒未満で最大1000桁の2つの数値を追加し、2)30秒未満で最大100個の100桁の数値を含むリストの合計を見つけることができます。パート1)は、10の異なる数値セットでテストされます。各数字の桁数は必ずしも同じではありません。同じ10セットがすべての提出に使用されます。
- 3つの追加ポイント subtractBig 、これは(x – y)を計算する必要があります。ここで、xとyは30秒未満で最大1000桁の数字です。10種類の数のセットが使用されます。各数字の桁数は必ずしも同じではありません。同じ10セットがすべての提出に使用されます。
- の3ボーナスポイント addBig 最大(桁数)を正しく追加できる送信 n1 そして n2 5秒未満で同じ長さの。(2の2ポイント nd 、3の場合は1 rd )
- の3ボーナスポイント addBig 最長1000桁の数字を5秒以内に正しく追加できる提出物 nd 、3の場合は1ポイント rd )。
- 提出がJMPスタッフメンバーによる提出と同じかそれよりも速い場合は、それぞれ3ポイント追加。
提出期限は、6月15日月曜日の午後11時59分東部(米国)時間です。番目 。幸運を!