code:
func isPalindrome(x int) bool {
if x < 0 {
return false
} else if x < 10 {
return true
} else {
//get The number of digits of the integer
//2^64 == 18446744073709551616, has 20 digits
//10000000000 is a 11 digits of integer
//100000 is a 6 digits of integer
nTemp, nCount := x, 0
if nTemp / 10000000000 > 0 {
nTemp /= 10000000000
nCount += 10
}//if nTemp / 10000000000 > 0
if nTemp / 100000 > 0 {
nTemp /= 100000
nCount += 5
}//if nTemp / 100000 > 0
if nTemp / 100 > 0 {
nTemp /= 100
nCount += 2
}//if nTemp / 100 > 0
if nTemp / 10 > 0 {
nTemp /= 10
nCount++
}//if nTemp / 10 > 0
if nTemp < 10 {
nCount++
} else {
nCount += 2
}//if nTemp < 10 else
nTopDigit, nLowestDigit := 0, 0
for i, j := 1, int(math.Pow10(nCount - 1)); i < j; {
nTopDigit, nLowestDigit = (x / j) % 10, (x / i) % 10
if nTopDigit != nLowestDigit {
return false
}//if nTopDigit != nLowestDigit
i *= 10
j /= 10
}//for i, j := 1, int(math.Pow10(nCount - 1)); i < j;
return true
}//if x < 0 else
}
result:
personal opinion:
Compare the ‘+’ and ‘*’ in producing the nCount, I find ‘+’ is faster than ‘*’, even though it must do int(math.Pow10(nCount - 1))