package main import "fmt" // 10^9 is the maximum ... So let's use uint64 ... // It solves it in 16s ... Yeap brute force. func reverse( in uint64 ) (out uint64) { for ; in != 0 ; in /= 10 { out *= 10 out += in % 10 } return } func hasOnlyOdd( in uint64 ) bool { for ; in != 0 ; in /= 10 { if (in%10)&1 == 0 { return false } } return true } func main() { cmp := 0 for i := uint64(0) ; i < 1000000000 ; i++ { if i % 10 != 0 && // Check for leading zeroes hasOnlyOdd( i + reverse(i) ) { cmp++; } } fmt.Println(cmp); }