首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回文程序产生不正确的输出

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

Stack Overflow用户
提问于 2012-08-09 23:37:31
回答 1查看 376关注 0票数 0

我在SPOJ (一个编程难题网站)上尝试了一个问题,我需要生成大于给定数字的最小回文数。我试着用模数和整数除法计算回文的两个边来解决这个问题,但它仍然给出了错误的答案。会有什么问题呢?

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-10 01:51:12

根据problem description的规定,您必须能够处理小于一百万位的任意大小的正整数。您的实现是基于int类型的,因此它只能处理最多九位数的数字(根据系统的INT_MAX设置几位数)。

示例输入:

代码语言:javascript
复制
1
100000000000000000000000000000000000000000

示例输出:

代码语言:javascript
复制
-2147483648

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11886916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档