#include <cstdio>
#include <cstring>
int main()
{
char a[202]={0}, b[202]={0};
scanf("%s%s", a, b);
int alen = strlen(a), blen = strlen(b), t = 0, i;
int a1[202]={0}, b1[202]={0};
for (i = 0; i < alen; i++) a1[i] = a[alen-1-i]-'0';//这里是把数组颠倒并且减符号0
for (i = 0; i < blen; i++) b1[i] = b[blen-1-i]-'0';//这里是把数组颠倒并且减符号0
alen = (alen > blen) ? alen : blen;//把 长的 数组值给 alen
for (i = 0; i <= alen; i++) //模拟 竖式 满 10进 1 ↓
t = a1[i]+b1[i], a1[i] = t%10, a1[i+1] += t/10; // ←
while (!a1[i] && i) i--;//有的位置可能没有赋值,也就是为 0,去除他们的干扰 把i的范围减小
for(; i >= 0; i--) printf("%d", a1[i]);//反着打印出来
return 0;
}
int型可以存9位数字,而上述代码在数组的每个元素中只存了0-9中的一位数,可以说浪费了很多空间,而且计算机计算4+5和3333+4444用的时间是相同的,所以我们有时候用压位来节省空间和时间。
#include<bits/stdc++.h>
using namespace std;
char a[10000000], b[10000000];
int a1[10000000], b1[10000000];
int main()
{
scanf("%s%s", a, b);
int alen = strlen(a), blen = strlen(b);
int i = 0, t;
for(i = 0; i < alen; i++) a1[i] = a[alen-1-i] - '0';
for(i = 0; i < blen; i++) b1[i] = b[blen-1-i] - '0';
alen = alen>blen ? alen:blen;
for(i = 0; i <= alen; i++)
{
t = a1[i]+b1[i];
a1[i+1] += t/10;
a1[i] = t%10;
}
while(!a1[i] && i) i--;
for(;i >= 0; i--)
printf("%d", a1[i]);
return 0;
}