c++高精度(200位以内加减法)

c++高精度(200位以内加减法)

众所周知,利用c++编译器可以编写基本的加减乘除运算程序,但是由于计算机硬件的限制导致计算机可以直接处理的数据位数是有限的。比如说,在c++中,int类型变量的数据存储范围为-2147483648到2147483647,虽然int类型变量的数据范围基本上可以满足日常生活中的计算要求,但是我们在工程中可能需要处理上百位甚至上千位的数据,因此c++高精度算法应运而生。
在上百位的运算中,c++所提供的基本数据类型无法满足我们的需要,所以我们需要一些容量较大的数据类型来存储和计算我们的数据,我们可以采用化整为零的方法,利用数组将整串数据分开来进行存储。
我们以200位以内的数据加减法为例。

  1. 接收和存储数据

首先,我们需要定义用来存储数据的变量,存储200位以内的数据,我们可以定义两个容量为200的int型数组,数组中的每个变量用来存储用户输入的一位数。在数组定义过程中,如果不对数组进行初始化,那么定义完的数组存储的变量是不固定的,因此我们可以采用一个简单的赋值语句进行数组的初始化,如下图所示。
c++高精度(200位以内加减法)
其次,用户再输入过程中通常为一次性输入,而并不是一位一位进行输入,所以我们需要一个字符串变量来接收用户输入的数据,然后在进行分割存储,因此我们还需要定义一个字符串类型变量。
变量定义完成后,我们需要考虑如何接收用户的数据。在接收数据时,首先我们采用cin语句将用户键入的数据存储到定义的字符串变量中,然后将字符串变量分割并转换成int型变量按位存储到int数组中。由于我们无法确定用户输入的数据的具体位数,所以我们需要将字符串从后向前进行分割存储。
在存储过程中,我们可以定义一个int型变量存储来记录用户输入数据的长度,然后利用for循环语句从后向前存储该位数的数据。具体代码如下图。
c++高精度(200位以内加减法)
第一串数据存储完毕之后,我们利用相同的办法将第二串数据进行存储,代码如下图。
c++高精度(200位以内加减法)

2.数据计算
将用户数据存储完毕之后,就要开始考虑数据的运算。其实程序的运算过程与我们在生活中的运算过程是一样的,只不过我们需要将我们在生活中计算的过程利用程序的各种逻辑及算数运算表现出来。
首先,我们需要找到两串数据的第一位,这样我们在运算到第一位后就可以停止运算。我们可以定义一个新的int型变量,再结合while语句从数组的第一位开始循坏,直到找到第一位不为0的数。利用相同的方法找到两串数据的第一位,代码如下。
c++高精度(200位以内加减法)
在确定好第一位的位置后,我们就可以开始真正的数学运算。利用for循环,从两串数据的末位开始,对应相加,相加后判断两位的和是否超过9,若超过9,则需要进位,即前一位加一。一直计算到两串数据的最靠前的一位。我们可以定义一个新的int型数组来存储数据的和,也可以将和保存到之前两个数组的任意一个中,两种方法均可,需要注意的是,用于存储和的数组需要201位,因为在数据相加过程中很有可能产生进位,因此我们需要添加一位来应对这种情况。此处我们采用第一个数组来存储数据的和。代码如下。
c++高精度(200位以内加减法)
3.输出数据
在数据输出过程中,我们首先利用一个int型变量来找到存储和的数组的第一位数,实现方法和第二步中的实现方法一致,找到和的首位后,利用for循环对最终结果进行打印输出即可。代码如下。
c++高精度(200位以内加减法)
4.减法的实现
减法的实现过程和加法相比,仅仅是运算过程的变化,但是减法的运算过程相比较加法而言要稍微复杂一点,因为在减法运算中我们需要考虑结果出现负数的情况,因此我们需要判断两串数据的大小,判断完成后再进行减法处理,利用大的数据减去小的数据,若结果应为负数,则在结果前先输出一个‘-’。代码如下。
c++高精度(200位以内加减法)
5.结果展示
加法:c++高精度(200位以内加减法)
减法:
c++高精度(200位以内加减法)
c++高精度(200位以内加减法)
c++高精度(200位以内加减法)