编写两百位以内数字的加法的算法时出现了奇怪的问题

我在编写一个有关两百位以内数字的加法的算法。编完之后,我发现我的算法出现了很奇怪的问题。比如这种,66+99=651.
我发现我应该出现在的百分位的数出现在了个位。如果运算的过程中不出现进位的话,最后一位就会变成0 。就比如22+33=550 。我检查了三个小时,实在没有找到为什么会这样,不知是否有老哥有空愿意解答一下,真的万分感谢!(;へ:)


#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;



int main()
{
    int a_length = 0, b_length = 0;
    int temp0=0;

    int t1=0, t2=0, t3=0, t4=0,t5=0,t6=0;//这相当于一些临时变量,用于传递值

    string temp;
    string a , b;
    cin >> a >> b;
    a_length = a.length();
    b_length = b.length();
    
    if (a_length < b_length)
    {
        temp = a;
        a = b;
        b = temp;
        temp0 = a_length;
        a_length = b_length;
        b_length = temp0;
    }


    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    a[a_length] = '0';
    b[b_length] = '0';

    for (int i=0;i<=b_length;i++)
    {
        t1 = (int)a[i]-48;
        t2 = (int)b[i]-48;

        for (;;)
        {
            if (t1 + t2+t3 > 9)
            {
                t5 = (t1 + t2+t3) % 10;
                t6 = (t1 + t2+t3) / 10;
                a[i] = (char)(t5 + 48);
                ++i;
                t1 = (int)a[i] - 48;
                t2 = (int)b[i] - 48;
                t3 = t6;

            }
            else
            {
                a[i] = (char)(t1 + t2+t3 + 48);
                t3 = 0;
                break;
            }
        }
    }

    reverse(a.begin(), a.end());
    a_length = a.length();


    for (int i = 0,w=0; i <= a_length; i++)
    {
        if (a[i] == '0'&&w==0)
            continue;
        else
        {
            w = 1;
            cout << a[i];
        }
    }

    a[0] = 'a';
    b[0] = 'b';

}




img

小心0+0

之前刷到过类似的题


#include<iostream>
#include<algorithm>
#include<cstring>
 
using namespace std;
 
 
 
int main(){
    string a, b;
    cin >> a >> b;
    int ans[10001];
    memset(ans, 0, sizeof(ans));
    int cnt = 0;
    int len_a = int(a.size()), len_b = int(b.size());
    int i=len_a-1, j=len_b-1;
    int plus=0;  // 进位
    while(i>=0 && j>=0){
        int tmp = (a[i--]-'0') + (b[j--]-'0') + plus;
        ans[cnt] = tmp%10;
        plus = tmp/10;
        cnt++;
    }
 
     
 
    while(i>=0){
        int tmp = plus+(a[i--]-'0');
        ans[cnt] = tmp%10;
        plus = tmp/10;
        cnt++;
    }
 
    while(j>=0){
        int tmp = plus+(b[j--]-'0');
        ans[cnt] = tmp%10;
        plus = tmp/10;
        cnt++;
    }
     
    if(plus){  // 此处plus只能是0或者1
        ans[cnt++] = plus;
    }
 
 
 
    for(int k=cnt-1; k>=0; k--){
        cout << ans[k];
    }
    cout << endl;
    return 0;
 
}