下一个回文 .奇怪的字符输出

The Next Palindrome .. Strange Character Output

本文关键字:字符 输出 回文 下一个      更新时间:2023-10-16

我编写了这段代码,它应该递增一个数字,直到得到这个输入数字的下一个回文数。

程序将数字作为字符串",因为它可能是一个非常大的数字 ( 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"是一个以字符串作为参数的函数,如果原始字符串等于它的反向字符串,则返回 true.. 否则返回 false

position-1处的数字'9'时,结果是什么?

    int n1 = (int)number[position-1] - '0';
    n1++;
    number[position-1] = n1 + '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);
}