Problem 36
Double-base palindromes
The decimal number, 585 = 10010010012 (binary), is palindromic in both bases.
Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.
(Please note that the palindromic number, in either base, may not include leading zeros.)
双进制回文数
十进制数585 = 10010010012(二进制表示),因此它在这两种进制下都是回文数。
找出所有小于一百万,且在十进制和二进制下均回文的数,并求它们的和。
(请注意,无论在哪种进制下,回文数均不考虑前导零。)
@Test
public void test(){
System.out.println(calculate(1000000));
}
public static long calculate(int upLimit){
long sum = 0;
for( int i = 1; i <= upLimit; i ++){
if( isPalindromic( String.valueOf(i))
&& isPalindromic( Integer.toBinaryString(i))){
sum += i;
System.out.println(i);
}
}
return sum;
}
public static boolean isPalindromic(String val){
char [] arr = new char[ val.length()];
val.getChars(0, arr.length, arr, 0);
for( int i = 0 ; i <= arr.length / 2; i ++){
if( arr[i] != arr[ arr.length - 1 - i]){
return false;
}
}
return true;
}