一、题目
1168:大整数加法
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222 33333333333333333333
【输出样例】
55555555555555555555
二、思路
步骤:
1.输入:定义成string输入两个大数 int型肯定存不了。
2.补齐长度:在短的数字前面填充0 把两个数字的长度补齐。计算出最长的那个数字长度 然后跟短的数字比较 缺几位 在前面补几位。
3.类型转换:通过减'0' 把string转换为数字。
4.加法计算:需要定义一个额外数字x进位时候用 从两个数字后面向前加法进位。
5.输出:因为前面进行了补0的操作 所以输出之前用while先把前面的0删除 也就是减少长度
三、代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a,b;
int a1[300],b1[300],c[300];
int la,lb,lc=0,l;
#输入
cin>>a>>b;
la=a.size();
lb=b.size();
l=la>lb?la:lb;
#补齐两个数的长度
for(int i=0; i<l-la; i++)
{
a="0"+a;
}
for(int i=0; i<l-lb; i++)
{
b="0"+b;
}
#把string转化成int型
for(int i=0; i<a.size(); i++)
{
a1[i]=a[i]-'0';
b1[i]=b[i]-'0';
}
#加法进位计算
int x=0;
for(int i=a.size()-1; i>=0; i--)
{
c[lc]=(a1[i]+b1[i]+x)%10;
x=(a1[i]+b1[i]+x)/10;
lc++;
}
c[lc]=x;
#输出
while(c[lc]==0)
{
lc--;
}
for(int i=lc; i>=0; i--)
{
cout<<c[i];
}
return 0;
}