多数を処理する場合、おそらく最も基本的な設計決定の1つは、多数をどのように表現するかです。
文字列、配列、リスト、またはカスタム(自家製)ストレージクラスになります。
その決定が行われた後、実際の数学演算は小さな部分に分解され、intやintegerなどのネイティブ言語タイプで実行されます。
結果の大きな数値を文字列として格納する非常に初歩的な ADDITIONの例をC#.Netに含めました。着信「番号」も文字列であるため、非常に「大きい」番号で送信できるはずです。この例は、単純にするために整数のみを対象としていることに注意してください。
文字列を使用しても、次のように文字数または数字の「数字」に制限があります。
.NET文字列の最大長は?
しかし、.Netのint32またはint64ネイティブ型をはるかに超える、非常に大きな数を追加できます。
とにかく、ここに文字列ストレージの実装があります。
/// <summary>
/// Adds two "integers". The integers can be of any size string.
/// </summary>
/// <param name="BigInt1">The first integer</param>
/// <param name="BigInt2">The second integer</param>
/// <returns>A string that is the addition of the two integers passed.</returns>
/// <exception cref="Exception">Can throw an exception when parsing the individual parts of the number. Callers should handle. </exception>
public string AddBigInts(string BigInt1, string BigInt2)
{
string result = string.Empty;
//Make the strings the same length, pre-pad the shorter one with zeros
int length = (BigInt1.Length > BigInt2.Length ? BigInt1.Length : BigInt2.Length);
BigInt1 = BigInt1.PadLeft(length, '0');
BigInt2 = BigInt2.PadLeft(length, '0');
int remainder = 0;
//Now add them up going from right to left
for (int i = (BigInt1.Length - 1); i >= 0; i--)
{
//If we don't encounter a number, this will throw an exception as indicated.
int int1 = int.Parse(BigInt1[i].ToString());
int int2 = int.Parse(BigInt2[i].ToString());
//Add
int add = int1 + int2 + remainder;
//Check to see if we need a remainder;
if (add >= 10)
{
remainder = 1;
add = add % 10;
}
else
{
remainder = 0;
}
//Add this to our "number"
result = add.ToString() + result;
}
//Handle when we have a remainder left over at the end
if (remainder == 1)
{
result = remainder + result;
}
return result;
}
それがあなた自身の実装についてのアイデアを与えてくれることを願っています。サンプルコードはおそらく最適化されていないか、そのようなものではないことに注意してください。どうすればそれができるのか、いくつかのアイデアを提供することを意図しています。