2014-11-02 91 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; 
}