算法之路之征服上海交大的oj-高精度加法
- 高精度加法
Description
输入2个整数a和b,输出a+b。
Input Format
输入有两行,第一行a,第二行b。
0≤a,b≤10100000
。
Output Format
输出只有一行,a+b。
Sample Input
1234
1111111111
Sample Output
1111112345
#include<iostream>
#include<string.h>
using namespace std;
char a[100000];
char b[100000];
char c[100000];
//num是用于存储进位的数字
int lena,lenb,len,num,flag=0; //flag标志是否是最后一个数要进位
int main(){
cin>>a;
cin>>b;
lena = strlen(a);
lenb = strlen(b);
len = lena>lenb?lena:lenb;
char ch;
for(int i=0;i<lena/2;i++){//倒置字符串
ch = a[i];
a[i] = a[lena-1-i];
a[lena-1-i] = ch;
}
for(int i=0;i<lenb/2;i++){//倒置字符串
ch = b[i];
b[i] = b[lenb-1-i];
b[lenb-1-i] = ch;
}
int t=0;
for(int i=0;i<len;i++){
if(i<lena&&i<lenb){
t = a[i]+b[i]-48-48+num;
if(t>=10){
if(i==len-1){
flag = 1;//最后一位要进位
}
num = t/10;
t = t%10;
} else{
num=0;
}
c[i] = t+48;
}else if(i<lena&&i>=lenb){
t = a[i]-48+num;
if(t>=10){
if(i==len-1){
flag = 1;
}
num = t/10;
t = t%10;
}else{
num=0;
}
c[i] = t+48;
}else if(i>=lena&&i<lenb){
t = b[i]-48+num;
if(t>=10){
if(i==len-1){
flag = 1;
}
num = t/10;
t = t%10;
} else{
num=0;
}
c[i] = t+48;
}
}
if(flag==1){
c[len++] = num+48;
}
for(int i=0;i<len/2;i++){
char ch = c[i];
c[i] = c[len-1-i];
c[len-1-i] = ch;
}
for(int i=0;i<len;i++){
cout<<c[i];
}
return 0;
}