[JAVA] ACM Reverse and Add
The Problem
เป็นการนำตัวเลขมาสลับ(Reverse)แล้วบวกกับค่าเดิม และกระทำเช่นนั้นไปเรื่อยๆจนกว่าผลลัพธ์จะเป็น palindrome ก็คือตัวเลขที่เรียงจากซ้ายไปขวา เรียงขวาไปซ้ายเป็นเลขเดียวกัน สังเกตุจากรูปด้านล่าง ผลลัพธ์ 9339 เรียงซ้ายไปขวา เรียงขวาไปซ้าย ก็ ได้ตัวเลขเดียวกัน
Sample input / output
I have a Java code.
import java.util.Scanner;
/**
* @author http://javaagkasit.blogspot.com/
*/
public class ReverseAndAdd {
static long MAX = (long) 4294967295.0;//ค่ามากสุด
private String sum ; // เช่น 195
private long sumba; //ถ้า sum เป็น 195 ,sumba ก็จะเป็น 951
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ReverseAndAdd rev = new ReverseAndAdd();
long sum2 = 0 ,re ; //re ไว้ตัวเลขที่กลับตำแหน่งแล้ว
String sum = ""; //เก็บตัวเลขที่อ่านมาจากไฟล์
try{
do{
sum = input.nextLine(); //อ่านข้อมูลมาที่ละบรรทัด
int count = 0;
while(true){//ทำไปเรื่อย
sum2 = Long.parseLong(sum);
re = rev.Reverse(sum);
if(sum2 == re)
break;//ออกจากการวนลูป (เจอ)
else if((count == 1000)|(sum2 > MAX)) {
System.out.println("not palindrome foun");
break; //ออกจากการวนลูป(ไม่เจอ)
}else {//เก็บผลลัพธ์ล่าสุด
sum = rev.ans(sum2, re);
count++;
}
}
rev.print(count, sum2,sum);//โชว์คำตอบออกทาง output
}while(!"0".equals(sum));
}catch(Exception e){
e.getMessage();
System.out.println("Input errors.!!!\nTry put, 195 ");
}
}
// เมทอต สำหรับสลับตำแหน่งตัวเลข เช่น 159 ก็จะสลับเป็น 951
public long Reverse(String sum){
StringBuffer sb = new StringBuffer(sum);
sb.reverse();
sumba = Long.parseLong(sb.toString());
return sumba;
}
//เอา sum + sumba
public String ans(long sum,long sumba){
sum += sumba; //sum = sum +sumba
String an = String.valueOf(sum);
return an;
}
//ปริ๊นคำตอบออก output
public void print(int count,long sum,String sums){
if((count == 1000)|(sum >= MAX)|(sums.equals("0")))
;
else
System.out.println(count+" "+sum);
}
}