c#实现高精度加法

    高精度加法?天哪,现在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();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值