0

この入力された番号の次の回文数を取得するまで、番号をインクリメントすることになっているこのコードを作成しました。

プログラムは、数値を文字列として受け取ります。これは、非常に大きな桁数(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を返します。

4

2 に答える 2

3

の数字が の場合、この結果はどうなりposition-1ます'9'か?

    int n1 = (int)number[position-1] - '0';
    n1++;
    number[position-1] = n1 + '0';
于 2013-01-29T12:49:58.490 に答える
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);
}
于 2013-01-29T13:00:23.553 に答える