There seems to be a certain problem with the variable handling the no. of test cases. Although I am able to generate next palindrome correctly for a test case, but the code is generating a palindrome even for the first line input (no. of test cases)
Need help.
here is my C++ solution:
include
include
include
include
using namespace std;
//to check if number contains all 9s
int AreAll9s (int num[], int n){
for (int i = 0; i , n; i++)
if (num[i] != 9)
return 0;
return 1;
}
//to print array
void printarray (int num[], int n){
for (int i = 0; i < n; i++)
printf("%d", num[i]);
printf("\n");
}
//Utility function to generate next palindrome
void generateNextPalindromeUtil (int num[], int n){
int mid = n/2;
int i = mid - 1;
int j = (n%2)? mid+1:mid;
bool leftissmaller = false;
while(i >= 0 && num[i] == num[j])
i--, j++;
if(i < 0 || num[i] < num[j])
leftissmaller = true;
while (i >= 0){
num[j] = num[i];
j++, i--;
}
if(leftissmaller){
int carry = 1;
i = mid - 1;
if (n%2){
num[mid] += carry;
carry = num[mid]/10;
num[mid] %= 10;
j = mid + 1;
}
else
j = mid;
while (i >= 0){
num[i] += carry;
carry = num[i] / 10;
num[i] %= 10;
num[j++] = num[i--];
}
}
}
/*Function to decide type of number and call utility function to generate next palindrome*/
void generateNextPalindrome (int num[], int n){
if (AreAll9s(num, n)){
printf("1");
for (int i = 1; i < n; i++)
printf ("0");
printf ("1\n");
}
else{
generateNextPalindromeUtil (num, n);
printarray (num, n);
}
}
//Driver function
int main(){
int t;
scanf ("%d", &t);
while (t--){
char num[1000001];
gets(num);
int n = strlen(num);
int inum[n];
for (int i = 0; i < n; i++){
inum[i] = (int)num[i] - '0';
}
generateNextPalindrome (inum, n);
}
return 0;
}