Не могу реализовать калькулятор на 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;
}