大数运算-加法(C/C++实现)

大数运算-加法

前言
  • 在很多情况下,c/c++所提供的基本数据类型已经不能满足我们的需求了,所以我们需要一种方法来解决一些大数的运算,在小学进行加法运算的时候,无论数据是什么,有多少位,都通通采取列竖式的方法进行计算并得出结果,本文将使用数组模拟列竖式计算来解决大数的加法运算。

问题分析
  • 首先我们先给定一组数据,来辅助说明整个计算过程
    • a = 987654321
    • b = 56789
    • 计算 a + b 的结果
  • 将两个数字的每一位分别存入两个数组:因为所给定的数据不是很大,这里就开辟长度为10的数组进行说明,a数组(a[])用来存储数字a的每一位,b数组(b[])用来存储数字b的每一位,c数组(c[])用来存储计算的结果(在程序中开辟一个新的数组,数组的每一位都是随机数,所以需要将数组初始化,把数组的每一位都赋值为0)。
0 1 2 3 4 5 6 7 8 9
a[] 9 8 7 6 5 4 3 2 1 0
b[] 5 6 7 8 9 0 0 0 0 0
c[] 0 0 0 0 0 0 0 0 0 0
  • 我们通过某种方式将其存入了数组中,从左往右观察上面这个表格,虽然我们想计算的是987654321 + 56789,但是存入数组中后我们发现,现在已经无法分辨 a 和 b 的值了。
    • a 的值变成了9876543210?
    • b 的值变成了5678900000?
  • 我们可以记录下数字 a 最后一位所在数组的位置,数字 b 最后一位所在数组的位置,这样虽然不会出现上面的问题了,但是在实际的计算过程中会很繁琐,并伴随着各种问题。接下来,我们换一种思路来将数字存入数组(逆序存入),存入的结果如下表所示:
0 1 2 3 4 5 6 7 8 9
a[] 1 2 3 4 5 6 7 8 9 0
b[] 9 8 7 6 5 0 0 0 0 0
c[] 0 0 0 0 0 0 0 0 0 0
  • 此时我们从右往左看这个表:
    • a = 0987654321 = 987654321
    • b = 0000056789 = 56789
  • 这样的结果才是我们所需要的,接下来我们继续来模仿列竖式的方法进行计算,c[n] = a[n] + b[n] + c[n], 如果结果大于等于10,我们就向前进一位。
    • c[0] = a[0] + b[0] + c[0] = 1
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值