How to find a list of numbers up to a limit that is a palindrome in base 10 and base 2 in Rust

1 Answer

0 votes
// 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)

*/



 



answered 1 day ago by avibootz
...