Не могу реализовать калькулятор на c++

Я должен реализовать сложение в столбик в 12-ричной системе счисления. Вводятся 2 числа - a и b в виде строки char[]. При вводе чисел в несколькими разрядами выводит белеберду. Прошу помочь, т.к. сам не могу найти ошибку в коде. Код для вычисления суммы:

if (strlen(a) > strlen(b)) 
    {
        max = strlen(a);
        min = strlen(b);
    }
    else
    {
        max = strlen(b);
        min = strlen(a);
    }

    for (i = 0; i<min;i++)
    {
        c2 = 0;
        c1 = 0;
        if ((strlen(a) - 1 - i) >= 0)
        {
            c1 = a[strlen(a) - 1 - i] - '0'; if (c1 == 17) c1 = 10; if (c1 == 18) c1 = 11;
        }
        if ((strlen(b) - 1 - i)>=0)
        {
            c2 = b[strlen(b) - 1 - i] - '0'; if (c2 == 17) c2 = 10; if (c2 == 18) c2 = 11;
        }
        c3 = c1 + c2 + g;
        g = c3 / 12;
        c3 = c3 % 12;
        l[max-1-i] = c3 + '0'; if (c3 == 10) l[max-1 - i] = 'A'; if (c3 == 11) l[max-1 - i] = 'B';
    }
    l[strlen(l)+1] = '\0';

g - остаток, который переход в следующий разряд. l - результат (должен быть в виде строки).


Ответы (1 шт):

Автор решения: Harry

Я бы делал это примерно так:

int val(char x) { return (x > '9') ? x - 'A' + 10 : x-'0'; }
char set(int x) { return (x > 9) ? 'A' + x - 10 : x + '0'; }

string sum12(string a, string b)
{
    if (a.size() > b.size()) swap(a,b);
    for(int i = b.size()-a.size(); i-->0; a = "0"+a);
    int carry = 0;
    for(int i = b.size(); i-->0; )
    {
        a[i] = val(a[i]) + val(b[i]) + carry;
        if (a[i] >= 12) {
            a[i] %= 12;
            carry = 1;
        } else carry = 0;
        a[i] = set(a[i]);
    }
    if (carry) a = '1' + a;
    return a;
}

https://ideone.com/9UkifB

→ Ссылка