0

我正在SPOJ(“Sphere Online Judge”,一个编程拼图网站)上尝试一个问题,我需要生成大于给定数字的最小回文。我试图通过用模数和整数除法计算回文的两侧来解决它,但它仍然给了我错误的答案。可能是什么问题?

#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

根据问题描述,您必须能够处理小于一百万位的任何大小的正整数。您的实现基于int类型,因此它只能处理最多大约九位数的数字(根据您的系统的 INT_MAX 给出或取几位数字)。

样本输入:

1
100000000000000000000000000000000000000000

样本输出:

-2147483648

您的输出不正确。正确的输出是100000000000000000000000000000000000000001

于 2012-08-09T17:51:11.867 回答