logo AlgoBeat OnlineJudge
登录 注册

【模板】高精度加法 题解

作者: longyitongxue  ·  发布于 2026-06-28 11:39:45  ·  最后修改于 2026-06-28 11:59:30
已通过
审核员:Carey_chen HCl · 2026-06-28 11:59:30

先把输入的数每个数字倒过来依次放在数组里。然后按步骤进行:

  1. 只管加法,对齐数组各位然后每一位相加就好。
  2. 进位,如果当前位 ,给前面进位,即前面那一位加上当前位 ,当前位 ,由于如果当前位 这个操作做了等于白做,所以省去 if 判断也可以。
  3. 处理前导零,然后再翻过来存入字符串返回输出结果。
#include<iostream>
using namespace std;
string add(string x,string y){
	int a[1005]={},b[1005]={},c[1005]={},lena,lenb,lenc;
	string ans="";
	lena=x.size();
	lenb=y.size();
	for(int i=1; i<=lena; i++) {
		a[i]=x[lena-i]-'0';
	}
	for(int i=1; i<=lenb; i++) {
		b[i]=y[lenb-i]-'0';
	}
	lenc=max(lena,lenb);
	//第1步,只管加
	for(int i=1; i<=lenc; i++) {
		c[i]=a[i]+b[i];
	}
	//第2步,处理进位
	for(int i=1; i<=lenc; i++) {
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	//第3步,处理
	if(c[lenc+1]) lenc++;
	//重转字符串 
	for(int i=lenc; i>=1; i--) {
		ans=ans+char(c[i]+48);
	}
	return ans;
}
int main() {
	string x,y;
	cin>>x>>y;
	cout<<add(x,y);
	return 0;
}

(代码为 2024-04-21 编写,和现在码风有区别,码风可能“好看”,将就看一下吧)

暂无评论

登录 后即可评论。