Defina uma função que receba dois inteiros não negativos aeb e retorne o último dígito decimal de a^b. Observe que a ou b pode ser muito grande! Você pode assumir que a entrada sempre será válida.
package kata
import (
"math"
"strconv"
)
func ParseInt(n string) int {
num, _ := strconv.ParseInt(n, 10, 64)
return int(num)
}
func LastDigit(n1, n2 string) int {
exponent := ParseInt(n2)
if exponent == 0 {
return 1
}
num := int(ParseInt(string(n1[len(n1)-1])))
var lastDigit int
if num%2 == 0 {
lastDigit = 6
} else {
lastDigit = 1
}
switch n1[len(n1)-1] {
case '0', '1', '5', '6':
return num
case '4', '9':
if exponent%2 == 0 {
return lastDigit
}
return num
default:
reminder := exponent % 4
if reminder == 0 {
return lastDigit
}
result := int(math.Pow(float64(num), float64(reminder))) * lastDigit % 10
return result
}
}
Caso de teste erra: espere 7 igual a 1 Caso de teste erre: espere 3 igual a 1
Eu tentei no meu Editor de Código, tudo funciona aparentemente certo. Mas ainda falhou em alguns casos de teste.
o último dígito do resultado da potência segue, na verdade, uma sequência. Aqui está uma função supereficiente para calcular o que você deseja: