C++大数加法——最简单实现

高精度加法

题目描述

给定两个整数 和 ,请你求出这两个整数的和。

输入描述

输入两个正整数 a,b, a和b都不超过100位。

输出描述

输出两数之和

输入样例

复制代码
1
2

输出样例

复制代码
3

输入样例

复制代码
1234567890123456789
9876543210987654321

输出样例

复制代码
11111111101111111110

思路及代码

cpp 复制代码
#include<iostream>
#include<vector>
#include<algorithm>
//#define DEBUG true
using namespace std; 
const int maxLine = 100+10;
void initRedict(){
	#ifdef DEBUG
	cout<<"执行重定向"; 
	freopen("../redict/demo/demo_in.txt","r",stdin);
	#endif
} 
string a,b;
vector<int> revVecA,revVecB;
int sumNums[maxLine];
int main(){
	initRedict(); 
	cin>>a>>b;
	// 逆序读取 录入容器 
	for(int i=a.size()-1;i>=0;i--)  revVecA.push_back(a[i]-'0');
	for(int i=b.size()-1;i>=0;i--)  revVecB.push_back(b[i]-'0');
	// 获取a,b字符串长短 (如果有负数就需要使用其他方法判断了)
	// 这里适用于正大数加法 
	int maxlen=max(a.size(),b.size());
	int minlen=min(a.size(),b.size());
	// 计算主体	
	int jinwei=0;
	for(int i=0;i<maxlen;i++){
		int addNums;
		if (i<minlen) addNums=revVecA[i]+revVecB[i];
		else if (a.size()>=b.size()) addNums=revVecA[i];
		else addNums=revVecB[i];
		
		sumNums[i]+=(addNums+jinwei)%10;
		jinwei=(addNums+jinwei)/10;
	}
	// 末尾特判 
	sumNums[maxlen]=jinwei;
	if (jinwei) maxlen++;
	//输出res 
	for(int i=maxlen-1;i>=0;i--){
		cout<<sumNums[i]; 
	}
	return 0;
}
相关推荐
j_xxx404_15 小时前
蓝桥杯基础--时间复杂度
数据结构·c++·算法·蓝桥杯·排序算法
学嵌入式的小杨同学15 小时前
STM32 进阶封神之路(二十五):ESP8266 深度解析 —— 从 WiFi 通信原理到 AT 指令开发(底层逻辑 + 实战基础)
c++·vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件
2501_9454235415 小时前
C++跨平台开发实战
开发语言·c++·算法
Oueii15 小时前
分布式系统监控工具
开发语言·c++·算法
haibindev15 小时前
把近5万个源文件喂给AI之前,我先做了一件事
java·前端·c++·ai编程·代码审计·架构分析
xushichao198915 小时前
C++中的中介者模式
开发语言·c++·算法
MORE_7715 小时前
leecode100-买卖股票的最佳时期-贪心算法
python·算法·贪心算法
AI科技星15 小时前
基于wr/c + h/c = 1的螺旋线矢量特性及应用分析
c语言·开发语言·人工智能·opencv·算法·计算机视觉·r语言
颜酱16 小时前
回溯算法专项突破练习(1)
javascript·后端·算法
进击的荆棘16 小时前
优选算法——分治
数据结构·算法·leetcode·分治