The judge says Wrong Answer for the code that I submitted for this problem
Here’s the link for ideone
and the code is:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
char *nozeros(char *s){
int i;
for(i=0; i<strlen(s); i++){
if(s[i] != '0')
break;
}
return s+i;
}
int all9(char *s){
for(int i=0; i<strlen(s); i++){
if(s[i] != '9')
return 0;
}
return 1;
}
void incrementFromMiddle(char *s, int pos){
int len = strlen(s);
for(int i=pos; i>=0; i--){
if(s[i] != '9'){
s[i] += 1;
s[(len%2 == 0)?len-i-1:len-i] = s[i];
break;
}
s[i] = '0';
s[(len%2 == 0)?len-i-1:len-i] = s[i];
}
}
int main(){
int t;
scanf("%i", &t);
while(t--){
char s[1000000];
scanf("%s", s);
char *ptr = nozeros(s);
int len = strlen(ptr);
if(all9(ptr)){
memset(ptr, '0', len);
ptr[0] = '1';
ptr[len] = '1';
ptr[len + 1] = '\0';
printf("%s\n", ptr);
continue;
}
for(int i=len-1; i>=0; i--){
if(ptr[i] != '9'){
ptr[i] += 1;
break;
}
ptr[i] = '0';
}
short firstTime=1;
short odd = len % 2;
int midpoint = floor(len / 2);
int start = (odd)? midpoint+1 : midpoint;
for(int i=start; i<len; i++){
if(ptr[i] == ptr[len - i - 1]){
continue;
}
if(ptr[i] > ptr[len - i - 1] && firstTime == 1){
if(odd)
incrementFromMiddle(ptr, midpoint);
else
incrementFromMiddle(ptr, midpoint-1);
}
ptr[i] = ptr[len - i - 1];
firstTime = 0;
}
printf("%s\n", ptr);
}
return 0;
}
Any help will be highly appreciated!!

Thanks.