Java basic | Java OOP | โครงสร้างข้อมูล | โจทย์ ACM



[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);
    }
}
          Result.
           
 !!!Download code there.!!!
!!!Download problem.!!!


share