回文程序产生不正确的输出

时间:2012-08-09 15:37:31

标签: c++ palindrome

我在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

1 个答案:

答案 0 :(得分:0)

根据problem description,您必须能够处理任何大小小于一百万位的正整数。您的实现基于int类型,因此它只能处理长达9位左右的数字(根据系统的INT_MAX给出或取几个数字)。

示例输入:

1
100000000000000000000000000000000000000000

示例输出:

-2147483648

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