Я сделал этот код, который должен увеличивать число до получения следующего числа палиндрома этого введенного числа.
Программа принимает число как строку, потому что это может быть очень большое число цифр
(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» — это функция, принимающая строку в качестве параметра, и если исходная строка равна ее обратному, она возвращает истину .. в противном случае возвращает ложь
Вы плохо переносите перенос … Эта часть недействительна:
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);
}
Каков результат этого, когда цифра в position-1
является '9'
?
int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';