SPOJ (「Sphere Online Judge」、プログラミング パズル サイト) で、与えられた数よりも大きい最小の回文を生成する必要がある問題を試しています。回文の 2 つの辺を法と int の除算で計算して解決しようとしましたが、それでも間違った答えが得られます。何が問題になる可能性がありますか?
#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