题目来源:信息学奥赛一本通(c++版)在线测评系统
最近学校也是教到了算法部分,在这里就为大家提供一下高精度加法的代码吧!
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
代码区:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a1,b1;
cin>>a1>>b1;
//定义,输入要求的两个字符串
int a[200]={},b[200]={},c[200]={}; //定义int数字类型数组
int lena=a1.size(),lenb=b1.size();//定义字符串长度
for(int i=0;i<lena;i++) a[i]=a1[lena-i-1]-'0';
for(int i=0;i<lenb;i++) b[i]=b1[lenb-i-1]-'0';
//将字符串内的内容导至数字数组中
int lenc=max(lena,lenb);//定义最终输出长度
for(int i=0;i<lenc;i++) c[i]=a[i]+b[i];//将结果导入第三个数组中
for(int i=0;i<lenc;i++)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
//进位处理
lenc++;
while(c[lenc]==0) lenc--;//减少多余的0
for(int i=lenc;i>=0;i--) cout<<c[i];//倒序打印数组
return 0;//返回0
}
以上就是高精度加法的代码了!希望大家多多支持,多多鼓励我,你们的每一个点赞都对我有很大的帮助!
如果有可以改进的地方,欢迎私信,欢迎评论!我会在第一时间答复!