时间限制,内存限制
时间限制: 1000 1000 1000 ms 内存限制: 65536 65536 65536 KB
题目描述
求两个不超过 200 200 200位的非负整数的和。
输入
有两行,每行是一个不超过 200 200 200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导 0 0 0,即如果结果是 342 342 342,那么就不能输出为 0342 0342 0342。
输入样例
22222222222222222222
33333333333333333333
输出样例
55555555555555555555
代码
#include<bits/stdc++.h>
using namespace std;
const int sp=101000;
string ay,ny;
int q[sp],b[sp];
void pio(){
int i=0;
while(b[i]==0&&i<sp-1) i++;//消除多余的前置0,i<sp-1为了保留一个0,例:0+0=0,需要保留
for(int j=i;j<sp;j++){
cout<<b[j];//输出b的值
}
}
void sio(){
int s,g=0;
for(int i=sp-1;i>0;i--)
{
s=b[i]+q[i]+g;//s为b的第i位的数+q的第i位的数+上一个数的进位 例:s=1+2+12 注:b[i]=1,q[i]=2,g=12,g为什么=12看下面
b[i]=s%10;//将s的值的个位存在b的i位上 例:123%10=3,b[i]=3;
g=s/10;//g储存s的值的进位 例:123/10=12 g=12;
}
pio();//调用输出函数 pio();
}
void dio(){
cin>>ny>>ay;
int li=ny.size(),lo=ay.size();//获取ny与ay的长度
for(int i=0;i<li;i++){
q[sp-li+i]=ny[i]-'0';//将字符串ny转化整型并储存在q数组里
}
for(int i=0;i<lo;i++){
b[sp-lo+i]=ay[i]-'0';//将字符串ay转化整型并储存在b数组里
}
sio();//调用加法函数 sio();
}
int main(){
dio();//调用储存输入函数 dio();
return 0;
}