C++ Исправить функцию, которая складывает символьные строки char!
Я написала функцию, которая складывает позитивные значения, но если попробовать сложить 1 + 9, в ответе выводится 0, а не 10. Не понимаю, в чем дело, помогите, пожалуйста, решить эту проблему!
И еще, если сможете, добавьте в функцию возможность складывать также отрицательные числа...
Очень нужна ваша помощь, я начинающий в этом и ломаю себе голову уже очень и очень долго в поискать решения этой задачи :(
void summ(char* a, char* b, char* c) {
int a_len = strlen(a), b_len = strlen(b);
int a_tmp = a_len - 1, b_tmp = b_len - 1, tmp, r = 0, digit;
for (int i = 0; i < max(a_len, b_len) + 1; ++i) {
tmp = ((a[a_tmp] - '0') + (b[b_tmp] - '0')) + r;
if (b_tmp < 0)
tmp = (a[a_tmp] - '0') + r;
if (a_tmp < 0)
tmp = (b[b_tmp] - '0') + r;
if (tmp > 9) {
digit = tmp % 10;
c[i] = digit + '0';
r = 1;
}
else {
r = 0;
c[i] = tmp + '0';
}
a_tmp--;
b_tmp--;
}
}
int main() {
int T;
char a[n];
char b[n];
char c[n];
do {
cin >> a;
cin >> b;
summ(a, b, c);
for (int i = strlen(c) - 1; i >= 0; --i) {
cout << c[i];
}
cout << "\nПродолжить - 1, закончить - 0." << endl;
cin >> T;
} while (T == 1);
}
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
а вот так работает:
void summ(char* a, char* b, char* c) {
const int a_len = strlen(a);
const int b_len = strlen(b);
int overflow = 0;
int i = 0;
for (i = 0; i < std::max(a_len, b_len); i++)
{
// получить цифры числа a и числа b
const int digit_a = (i < a_len) ? (a[a_len - 1 - i] - '0') : 0;
const int digit_b = (i < b_len) ? (b[b_len - 1 - i] - '0') : 0;
// вычислить цифру числа c
const int res = digit_a + digit_b + overflow;
overflow = res / 10;
// записать цифру в число c
c[i] = '0' + (res % 10);
}
// учесть бит переполнения
if (overflow != 0)
c[i++] = '0' + overflow;
// закрыть строку
c[i] = 0;
// перевернуть строку (число было записано в обратном порядке)
_strrev(c);
}