0

SPOJ (「Sphere Online Judge」、プログラミング パズル サイト) で、与えられた数よりも大きい最小の回文を生成する必要がある問題を試しています。回文の 2 つの辺を法と int の除算で計算して解決しようとしましたが、それでも間違った答えが得られます。何が問題になる可能性がありますか?

#include <cmath>
#include <iostream>

using namespace std;

int inverse(int a){
    int inv = 0;
    while( a > 0){
        inv = inv*10 + a%10;
        a = a/10;
    } // while
    return inv;
} // inverse

int main(){
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        int a;
        cin >> a;
        int size  = 0;
        int tmp = a;
        while(tmp > 0){
            size++;
            tmp/=10;
        } // while

        bool even = false;
        int middle = size/2;
        if(size%2==0)even = true;
        if(!even)middle++;
        int l = a/pow(10.0,size-middle);
        int r = a%int(pow(10.0,middle));
        int lr = inverse(l);
        if(lr <= r){
            l++;
            lr=inverse(l);
        } // if

        if(!even)
            lr%=int(pow(10.0,middle-1));

        int wynik = l*pow(10.0,size-middle)+lr;

        if(a==9)
            wynik=11;
        else if(a==0)
            wynik = 1;

        cout << wynik << endl;
    } // for

    return 0;
} // main
4

1 に答える 1

0

問題の説明によると、100 万桁未満の任意のサイズの正の整数を処理できる必要があります。実装は型に基づいているintため、最大で 9 桁までの数値しか処理できません (システムの INT_MAX に応じて数桁を指定または取得します)。

サンプル入力:

1
100000000000000000000000000000000000000000

出力例:

-2147483648

あなたの出力は正しくありません。正しい出力は100000000000000000000000000000000000000001.

于 2012-08-09T17:51:11.867 に答える