// Function to check if a number is a palindrome in a given base
fn is_palindrome(num: u32, base: u32) -> bool {
if base < 2 {
return false; // Invalid base
}
let mut strnum_reversed = String::new();
let mut temp = num;
// Convert number to string in given base
loop {
let digit = temp % base;
strnum_reversed.push(
if digit < 10 {
(b'0' + digit as u8) as char
} else {
(b'A' + (digit - 10) as u8) as char
},
);
temp /= base;
if temp == 0 {
break;
}
}
// Check palindrome
let strnum: String = strnum_reversed.chars().rev().collect();
strnum_reversed == strnum
}
fn binary_string(num: u32) -> String {
let mut binary = String::new();
let mut temp = num;
// Print binary representation
loop {
binary.push(if temp % 2 == 1 { '1' } else { '0' });
temp /= 2;
if temp == 0 {
break;
}
}
binary.chars().rev().collect()
}
fn main() {
let limit = 1000;
println!("Numbers that are palindromes in both base 10 and base 2:");
for i in 1..=limit {
if is_palindrome(i, 10) && is_palindrome(i, 2) {
let binary = binary_string(i);
println!("{} (binary: {})", i, binary);
}
}
}
/*
run:
Numbers that are palindromes in both base 10 and base 2:
1 (binary: 1)
3 (binary: 11)
5 (binary: 101)
7 (binary: 111)
9 (binary: 1001)
33 (binary: 100001)
99 (binary: 1100011)
313 (binary: 100111001)
585 (binary: 1001001001)
717 (binary: 1011001101)
*/