我在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
答案 0 :(得分:0)
根据problem description,您必须能够处理任何大小小于一百万位的正整数。您的实现基于int
类型,因此它只能处理长达9位左右的数字(根据系统的INT_MAX给出或取几个数字)。
示例输入:
1
100000000000000000000000000000000000000000
示例输出:
-2147483648
您的输出不正确。正确的输出是100000000000000000000000000000000000000001
。