A positive integer is called a palindrome if its representation in the decimal system is the same when read from left to right and from right to left. For a given positive integer K of not more than 1000000 digits, write the value of the smallest palindrome larger than K to output. Numbers are always displayed without leading zeros.
2
808
2133
Output:
818
2222
Input
The first line contains integer t, the number of test cases. Integers K are given in the next t lines.Output
For each K, output the smallest palindrome larger than K.Example
Input:2
808
2133
Output:
818
2222
Solution in java:
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static void p(Object o){ System.out.println(o);}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int zz = sc.nextInt();
for(int z = 0; z < zz;z++)
{
String s = sc.next();
String ans = s.substring(0,s.length()/2);
if(s.length()%2 == 1)
{
ans = ans + s.charAt((s.length()/2))+rev(ans);
}else
ans += rev(ans);
if(larger(ans,s))
{
System.out.println(ans);
}else{
boolean done = false;
for(int i = (s.length()-1)/2;i>=0;i--)
{
if(ans.charAt(i) != '9')
{
done = true;
if(i == s.length()/2 && s.length()%2 == 1)
{
ans = ans.substring(0,s.length()/2)+((char)(ans.charAt(i)+1))+ans.substring(s.length()/2+1);
}else{
if(s.length()%2 == 1)
{
ans = ans.substring(0,i)+((char)(ans.charAt(i)+1))+zeros(s.length()/2 - i-1);
ans = ans+"0"+rev(ans);
}else{
ans = ans.substring(0,i)+((char)(ans.charAt(i)+1))+zeros(s.length()/2 - i-1);
ans = ans+rev(ans);
}
}
break;
}
}
if(done) System.out.println(ans);
else
{
ans = "1";
while(ans.length() < s.length())
ans +="0";
ans += "1";
System.out.println(ans);
}
}
}
}
private static String zeros(int i) {
StringBuilder z = new StringBuilder();
for(int j = 0; j < i;j++)
z.append("0");
return z.toString();
}
private static boolean larger(String ans, String s) {
for(int i = 0; i < ans.length();i++)
{
char a = ans.charAt(i);
char b = s.charAt(i);
if(a < b) return false;
if(a > b) return true;
}
return false;
}
private static String rev(String ans) {
StringBuilder st = new StringBuilder(ans);
return st.reverse().toString();
}
}
No comments:
Post a Comment