Номер палиндрома: что не так с моим кодом? - PullRequest
0 голосов
/ 05 мая 2019

Я пишу код на c ++, чтобы определить, является ли входное число номером палиндрома, что означает, что его обратное значение совпадает с исходным. У меня проблемы с вычислением обратной INT.

например.

121 returns true;
123 returns false;
12321 returns true;
10 returns false;

Я ввожу 123, а сумма должна быть 321. Однако мой код продолжает возвращать 386. Я вошел в функцию с помощью xcode. Тем не менее, я понятия не имею, почему обратные + = (3 * 10) + 2 поворота равны 35 или почему окончательное обратное число равно 386.

int origin = x;
int reverse = 0;

while (x != 0) {
    int digit = x % 10;
    reverse += ((reverse * 10) + digit);
    x /= 10;
}

1 Ответ

0 голосов
/ 05 мая 2019

почему reverse += (3 * 10) + 2 превращается в 35

Потому что += добавляет то, что справа, к существующему значению того, что слева. (3 * 10) + 2 равно 32, но reverse было уже 3, и поэтому вы добавляете свои 32 к существующему 3, что составляет 35.

Вы не хотите добавлять к значению reverse; Вы хотите заменить это.

Изменение

reverse += ((reverse * 10) + digit)

К * * 1023

reverse = ((reverse * 10) + digit)
...