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