高精度加法?天哪,现在int64就已经很长了,为什么还要高精度呢?好了,那你去给我算算99999999999999999999+99999999999999999999等于多少?当然,有可能,你认为丝毫没有任何用处,当你去算pi的时候可能你觉得就有用了。本文只是借加法来阐述高精度算法的实现问题。
假设,我让你去算999+999,你的第一直觉便是拿支笔并且列竖式,便可以轻松算出如果写出来便就是想这样:
999
+999
-------
1998
(这个排版有毒,将就着看吧。)
好了,列了竖式,你开始逐位计算。其实在计算机程序中我们可以这么去算。
我们先解决输入问题,我们最终目标就是算出892374892748923748923749823+2834728947238947283947283是吧?那么我们输入的话肯定只能输入成为字符串了,要不然其余的任何都无法实现接受这么长的数据。那么我们在main()开头先询问输入数据
string num1 = Console.ReadLine();
string num2 = Console.ReadLine();
之后我们对字符串进行分割,布置到数组之后,之后各位相加,进位,就完事了。我就直接上全部代码了。
static void Main(string[] args) {
string change;
string num1 = Console.ReadLine();
string num2 = Console.ReadLine();
int[] n1 = new int[num1.Length];
int[] n2 = new int[num2.Length];
for (int i = 0; i < num1.Length; i++) {
change = num1[i].ToString();
n1[i] = int.Parse(change);
}
for (int i = 0; i < num2.Length; i++)
{
change = num2[i].ToString();
n2[i] = int.Parse(change);
}
if (num1.Length > num2.Length)
{
for (int i = 0; i < num2.Length; i++)
{
n1[num1.Length - i-1] += n2[num2.Length - i-1];
}
for (int i = n1.Length-1; i > 0; i--) {
if (n1[i] >= 10) {
n1[i - 1]++;
n1[i] %= 10;
}
}
foreach (int x in n1)
{
Console.Write(x);
}
}
else {
for (int i = 0; i < num1.Length; i++) {
n2[num2.Length - i - 1] += n1[num1.Length - i - 1];
}
for (int i = n2.Length-1; i > 0; i--) {
if (n2[i] >= 10) {
n2[i - 1]++;
n2[i] %= 10;
}
}
foreach (int x in n2) {
Console.Write(x);
}
}
Console.Read();