Следующий палиндром .. Странный вывод символов

Я сделал этот код, который должен увеличивать число до получения следующего числа палиндрома этого введенного числа.

Программа принимает число как строку, потому что это может быть очень большое число цифр
(0 < цифры < 1000000) «….

Код

int main ()
{
string number = "1243";
int position = number.length()-1;
do
{
if (number[position] == '9')
{
//cout << "hereee";
number[position] = '0';
int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';
nextPalindrome[position-1];
cout << number <<"hereee2"<< endl; // only to determine if i get in "if"}
else
{
int n1 = (int)number[position] - '0';
n1++;
number[position] = n1 + '0';
cout << number <<"hereee1" << endl; // only to determine if i get in "else"}
} while (isPalindrome(number) == false);
}

Это начало брать цифру в текущей позиции, увеличивать ее и возвращать как символ снова

Эта проблема

cout << number <<"hereee1" << endl;

эта строка показывает номер состояния во время бега, и это так:

12"6 hereee1

12"7 hereee1

12"8 hereee1

12"9 hereee1

12#0 hereee2

12#1 hereee1

в то время как это должно быть

1236 hereee1

1237 hereee1

1238 hereee1

1239 hereee1

1240 hereee2

1241 hereee1

я не знаю, где ошибка .. может кто-нибудь помочь

НОТА : «isPalindrome» — это функция, принимающая строку в качестве параметра, и если исходная строка равна ее обратному, она возвращает истину .. в противном случае возвращает ложь

0

Решение

Вы плохо переносите перенос … Эта часть недействительна:

    int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';

Это только увеличивает цифру на предыдущем месте. И если это случится '9' (то же самое, что пытался предложить Матс Петерссон), оно просто переполняется … Однако его следует перенести и на следующую цифру … Это рекурсивное решение этой проблемы (остерегаться, там могут быть синтаксические ошибки, я не кодировал в C ++ с давних времен …):

/*
* This function adds one to the specified digit of a
* string containing a decimal integer.
*
* Contains no checks whatsoever. Behavior is undefined when
* not supplied a valid input string.
*/
int addOneToDigit (string number, int digit)
{
if (number[digit] == '9')
{
number[digit] = '0';
//we need to handle getting a longer string too...
if(digit>0)
{
return addOneToDigit(number, digit-1);
}
else
{
return "1" + number;
}
}
else
{
int n1 = (int)number[digit] - '0';
n1++;
number[digit] = n1 + '0';
}
return number;
}

и main () будет выглядеть примерно так:

int main ()
{
string number = "1243";
do
{
number = addOneToDigit(number,number.length()-1)
}
while (isPalindrome(number) == false);
}
1

Другие решения

Каков результат этого, когда цифра в position-1 является '9'?

    int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';
3

По вопросам рекламы [email protected]