Hi, Can you please help me to fix the error. I am not sure what is going wrong. I could get output in Eclipse but time exceeds error on SPOJ.
import java.math.BigInteger;
import java.util.ArrayList;
import java.lang.*;
import java.io.*;
public class Main{
public static void main(String[] args) {
String s3 = HelperInput.getInput("");
ArrayList str= new ArrayList();
for (int i=0;i try {
String s2 = HelperInput.getInput("");
str.add(s2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (String s1 : str) {
try {
BigInteger fHalfInt;
BigInteger sHalfInt;
String mid;
Palin p1 = new Palin();
int hsize = (int)s1.length()/2;
if (hsize == 0) {
System.out.println("11");
} else {
if (s1.length() % 2 == 0) {
fHalfInt = new BigInteger(s1.substring(0, hsize));
sHalfInt = new BigInteger(s1.substring(hsize, s1.length()));
mid = "";
} else {
fHalfInt = new BigInteger(s1.substring(0, hsize));
sHalfInt = new BigInteger(s1.substring(hsize+1, s1.length()));
mid = s1.substring(hsize, hsize+1);
}
BigInteger revFhalf = new BigInteger(new StringBuffer(s1.substring(0, hsize)).reverse().toString());
p1.checkNextPalindrome(fHalfInt, sHalfInt, revFhalf, mid, hsize);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Palin {
//private String output;
private BigInteger incr = new BigInteger ("1");
public void checkNextPalindrome (BigInteger fhalf, BigInteger shalf, BigInteger revFhalf , String mid, int hsize) {
int flag = shalf.compareTo(revFhalf);
if (flag >= 0) {
if (!mid.isEmpty() && mid.equals("9") ) {
String secHalf= new StringBuffer (fhalf.add(incr).toString()).reverse().toString();
//System.out.println("" + secHalf.length() );
if (secHalf.length() > hsize) {
//System.out.println("" + secHalf.length() );
System.out.println("" + fhalf.add(incr) + "0" + secHalf.substring(1));
} else {
System.out.println("" + secHalf.toString() + secHalf.length() );
System.out.println("" + fhalf.add(incr) + "0" + secHalf);
}
} else if (!mid.isEmpty() && !mid.equals("9") ) {
String secHalf= new StringBuffer (fhalf.toString()).reverse().toString();
BigInteger midValue = new BigInteger(mid);
System.out.println("" + fhalf + midValue.add(incr) + secHalf);
} else {
String secHalf= new StringBuffer (fhalf.add(incr).toString()).reverse().toString();
if (secHalf.length() > hsize) {
System.out.println("" + fhalf.add(incr) + secHalf.substring(1));
} else {
System.out.println("" + fhalf.add(incr) + secHalf);
}
}
} else {
if (!mid.isEmpty()) {
String secHalf= new StringBuffer (fhalf.toString()).reverse().toString();
BigInteger midValue = new BigInteger(mid);
System.out.println("" + fhalf + midValue + secHalf);
} else {
String secHalf= new StringBuffer (fhalf.toString()).reverse().toString();
System.out.println(fhalf + secHalf);
}
}
}
}
class HelperInput {
public static String getInput (String prompt) {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print(prompt);
System.out.flush();
try {
return stdin.readLine();
} catch(Exception e) {
return "Error: " + e.getMessage();
}
}
}