模拟加法
一些注意事项
1 n这个长度要取2个字符串的最大长度
2 用一个数组分别表示每个位上的数字之和 s[1] 表示个位之和
那么s[i] = a[i] - '0' + b[i] - '0' 因为 '0' - '0' = 0 , '1' - '0' = 1
但是 这么写有一些细节问题
如果这个字符串在这一位没有字符的话
就会变成 0 - '0' 从而出现负数
所以需要特判一下 这个位上有没有字符
3 s数组需要倒序输出
如果s[n + 1] 存在 需要先输出
#include<bits/stdc++.h>
using namespace std;
const int N = 110 ;
char a[N] , b[N] ;
int s[N] ;
int main()
{
cin >> a + 1 >> b + 1 ; //下标从一开始输入
int n = max(strlen(a + 1),strlen(b + 1)) ;
reverse(a + 1 , a + 1 + strlen(a + 1)) ; // 翻转字符a数组
reverse(b + 1 , b + 1 + strlen(b + 1)) ; // 翻转字符b数组
// 从个位开始相加 结果储存到s数组里面
for(int i = 1 ; i <= n ; i ++)
{
if(a[i] && b[i]) s[i] = a[i] - '0' + b[i] - '0' ;
else if(a[i] && !b[i]) s[i] = a[i] - '0' ;
else s[i] = b[i] - '0' ;
}
// 模拟逢十进一的过程
for(int i = 1 ; i <= n ; i ++)
{
int m = s[i] / 10 ;
s[i] = s[i] % 10 ;
s[i + 1] += m ;
}
if(s[n+1]) cout << s[n+1] ;
for(int i = n ; i >= 1 ; i --) cout << s[i] ;
return 0;
}