所谓高精度数就是数据长度较大的数,如数据长度的表现形式为1≤整数长度≤100000。该问题仅在C++中出现,Java和Python都有相应的机制处理该问题。
C++中解决大数运算的主要思路就是将大数视作一个字符串,再用数组(容器)将字符串中的每一位存储起来。
将大数拆分处理的主要代码如下
string a, b; //a,b是两个大数,用string类型进行输入
vector<int>A, B; //创建两个vector容器A,B用于存储大数
cin >> a >> b;
//分别把字符串a,b压入容器里面(逆序存储)
for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
一.高精度数加法计算
1.主要思路
(1)从最低位开始算起;
(2)首先把这一位对应的两个数字相加,如果相加的和≥10,则需要进位,让下一位+1(这里注意如果有进位,在进行下一次操作时还要加上之前进位的值);
(3)重复⒉操作。
2.例题演示
给定两个正整数(不含前导 00),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤1000001≤整数长度≤100000
输入样例:12122 23122
输出样例:35244
代码实现:
#include<iostream>
#include<vector>
using namespace std;
//C=A+B
vector<int> add(vector<int>& a, vector<int>& b)
{
vector<int> C;
int t=0;
for (int i = 0; i < a.size() || i < b.size(); i++)
{
if (i < a.size()) t += a[i]; //加之前作一个存在判断,看看当前位置上是否还有值
if (i < b.size()) t += b[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(1);
return C;