문제는 간단하지만 타입의 범위와 알고리즘 고민으로 학습하기 좋은 예제 였다.
먼저 보통 사용하던 메서드들로 테스트
@ParameterizedTest
@MethodSource("providerParam")
void test1(int a, int b, int expect) {
double total = Math.pow(a, b);
int actual = Math.floorMod((long)total, 10);
assertEquals(expect, actual);
}
@ParameterizedTest
@MethodSource("providerParam")
void test2(int a, int b, int expect) {
BigInteger base = new BigInteger(String.valueOf(a));
BigInteger total = base.pow(b);
BigInteger actual = total.mod(BigInteger.TEN);
assertEquals(expect, actual.intValue());
}
3
9
7
1
3
9
7
int result = 1;
for (int i = 0; i < b; i++) {
result = a * result % 10;
}
if (result == 0) {
result = 10;
}