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

1 Answer

0 votes
import Foundation

// Function to check if a number is a palindrome in a given base
func isPalindrome(_ num: UInt, base: UInt) -> Bool {
    if base < 2 { return false } // Invalid base

    var strnumReversed = ""
    var temp = num

    // Convert number to string in given base
    repeat {
        let digit = temp % base
        let char = digit < 10
            ? Character(UnicodeScalar(UInt8(ascii: "0") + UInt8(digit)))
            : Character(UnicodeScalar(UInt8(ascii: "A") + UInt8(digit - 10)))
        strnumReversed.append(char)
        temp /= base
    } while temp > 0

    // Check palindrome
    return strnumReversed == String(strnumReversed.reversed())
}

func main() {
    let limit: UInt = 1000

    print("Numbers that are palindromes in both base 10 and base 2:")
    for i in 1...limit {
        if isPalindrome(i, base: 10) && isPalindrome(i, base: 2) {
            print("\(i) (binary: ", terminator: "")

            // Print binary representation
            var binary = ""
            var temp = i
            repeat {
                binary.append(temp % 2 == 1 ? "1" : "0")
                temp /= 2
            } while temp > 0

            let binaryStr = String(binary.reversed())
            print("\(binaryStr))")
        }
    }
}

main()


/*
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
...