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

时间:2013-01-29 12:41:55

标签: c++ palindrome

我制作了这个代码,该代码应该增加一个数字,直到得到这个输入数字的下一个回文数。

程序将数字作为字符串“因为它可能是一个非常大的数字  (0< digits< 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 .. else return false

2 个答案:

答案 0 :(得分:3)

position-1的数字为'9'

时,结果是什么?
    int n1 = (int)number[position-1] - '0';
    n1++;
    number[position-1] = n1 + '0';

答案 1 :(得分:1)

你不能很好地处理结转......这部分无效:

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

这只会增加前一个地方的数字。如果恰好是'9'(与Mats Petersson试图提出的相同),它只会溢出......但是它应该被转移到下一个数字......这是一个递归解决方案( 要注意,可能存在语法错误,我从未用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);
}