[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); } }