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