JAVA版的见:https://blog.csdn.net/qq_34035956/article/details/104474513
用字符串实现两个超大整数相加:
直接上代码:
using System;
using System.Linq;
using System.Text;
namespace CSharpTest01
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Program Start:");
string str1 = "123456789";
string str2 = "123456";
string result = BigNumberAdd(str1, str2);
Console.WriteLine(result);
Console.WriteLine("Program End:");
}
private static String BigNumberAdd(string str1, string str2)
{
// 判空
if (str1 == null || "".Equals(str1))
{
return str2;
}
if (str2 == null || "".Equals(str2))
{
return str1;
}
int maxLength = Math.Max(str1.Length, str2.Length);
// 定义一个存储结果的字符串,长度要比最大长度字符串还长一位
// 用于存储进位
StringBuilder result = new StringBuilder(maxLength + 1);
// 字符串翻转
str1 = new string(str1.ToCharArray().Reverse().ToArray());
str2 = new string(str2.ToCharArray().Reverse().ToArray());
int minLength = Math.Min(str1.Length, str2.Length);
// 进位
int carry = 0;
// 当前位上的数值
int currentNum = 0;
// 循环变量
int i = 0;
for (; i < minLength; i++)
{
// 两字符对应数值,相加再加上进位
currentNum = str1[i] + str2[i] - 2 * '0' + carry;
// 获取进位
carry = currentNum / 10;
// 计算当前位的最终值
currentNum %= 10;
// 保存当前位的值到最终字符缓冲区中
result.Append(currentNum);
}
if (str1.Length < str2.Length)
{
str1 = str2;
}
for (; i < str1.Length; i++)
{
currentNum = str1[i] - '0' + carry;
carry = carry / 10;
currentNum %= 10;
result.Append(currentNum);
}
if (carry > 0)
{
result.Append(carry);
}
return Reversal(result.ToString());
}
private static string Reversal(string input)
{
//string result = new string(input.ToCharArray().Reverse<char>().ToArray());
//return result;
StringBuilder result = new StringBuilder(input.Length);
for (int index = input.Length - 1; index >= 0; index--)
{
result.Append(input[index]);
}
return result.ToString();
}
}
}