2014-11-02 65 views
-4

好吧,所以我不知道如何解決這個問題!我需要編寫一個代碼,它可以找到所有數字小於100萬的數字,它們都是基數10和基數2中的迴文數。爪哇:兩個基地的迴文掌

有人能幫我解決這個問題嗎?

+0

以10爲底數生成迴文。總結它們。在基數2中生成迴文。轉換爲基數10,對它們進行求和。加兩個總和。 – Deltharis 2014-11-02 22:40:39

+2

先閱讀:[如何問](http://stackoverflow.com/help/how-to-ask) – 2014-11-02 22:41:31

+0

@Deltharis你顯然是錯的。 OP:什麼問題?循環所有數字低於100萬。檢查迴文基座10.檢查迴文基座2.如果兩者都滿意,請加入蓄電池。 – maaartinus 2014-11-02 22:46:34

回答

0

該解決方案非常前沿,它只是1M以下所有迴文數字的暴力破解。

public class Main { 


    public static void main(String[] args) { 

     int count=0; 
     for (int i = 0; i < 1_000_000; i++) { 
      if (isDoublePalindrome(""+i)) { 
       count+=i; 
      } 
     } 

     System.out.println(count); 

    } 

    public static boolean isPalindrome(String N){ 
     return new StringBuilder(N).reverse().toString().equals(""+N); 
    } 

    public static String toBinary(String N){ 

     return Long.toBinaryString(Long.parseLong(N)); 
    } 

    public static boolean isDoublePalindrome(String N){ 

     if(isPalindrome(N) && isPalindrome(toBinary(N))) return true; 
     return false; 
    } 

} 
0

剩下的就是你的,但這裏是它會告訴你一個int是否在給定的基本回文的方法;假設參數是正確的,即要檢查的數字是> = 0且基數> 0:

public static isPalindromInBase(final int before, final int base) 
{ 
    int after = 0; 

    for (int i = before; i > 0; i /= base) { 
     after += i % base; 
     after *= base; 
    } 

    return before == after; 
}