많은 수를 다룰 때 가장 기본적인 디자인 결정 중 하나는 어떻게 많은 수를 대표 할 것인가?
문자열, 배열, 목록 또는 사용자 정의 (자체) 스토리지 클래스입니다.
결정이 내려지면 실제 수학 연산은 작은 부분으로 나뉘어 int 또는 정수와 같은 고유 언어 유형으로 실행될 수 있습니다.
나는 매우 기초적인 내용을 포함 시켰습니다C # .Net에는 결과적으로 많은 수를 문자열로 저장하는 ADDITION 예제 . 들어오는 "숫자"도 문자열이므로 매우 큰 숫자로 보낼 수 있습니다. 예제는 정수를 단순하게 유지하기위한 것임을 명심하십시오.
문자열을 사용하더라도 여기에 표시된대로 문자 수 또는 숫자의 "숫자"에 제한이 있습니다.
.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;
}
나는 그것이 당신에게 당신의 구현에 대한 아이디어를 제공하기를 바랍니다. 샘플 코드는 아마도 최적화되지 않았거나 이와 비슷한 것이 아닙니다. 그것은 어떻게 할 수 있는지에 대한 아이디어를 제공하기위한 것입니다.