정말 간단한 문제이다.
논리적으로 조금만 생각해 보면 어렵지 않게 풀 수 있다.
설명
위 문제의 키포인트는 '마지막 자리' 숫자만 출력하면 된다는 것이다.
위의 예제입력 9 635 의 경우엔 9의 635 제곱을 하라는 의미인데,
이런식으로 연산하는것은 자원 낭비가 심할뿐더러
추가 라이브러리를 이용하지 않는다면 overflow 를 일으킬 것이다.
마지막 자리만 구하기 위해서는 굳이 모든 연산을 할 필요가 없다
코드
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
unsigned int nums, a, b, output;
scanf("%d", &nums);
for (int i = 0; i < nums; ++i)
{
output = 1;
scanf("%d %d", &a, &b);
for (int j = 0; j < b; ++j)
{
output = (output * a) % 10;
}
if (output == 0)
{
output = 10;
}
printf("%d\n", output);
}
}
간단하다.
마지막 자리는 그 자리의 연산만 영향을 준다.
생각 해 보자.
9 * 9 * 9 * 9 * 9 * 9 = 마지막 자리가 뭘까?
실제로 계산해 보면 1 이 나온다.
하지만 직접 제곱할 필요가 없다고 위에서도 언급했다.
9 * 9 = 8'1'
1 * 9 = '9'
9 * 9 = '1'
1 * 9 = '9'
9 * 9 = '1'
과 같이 도출될 수 있다.
문제에서 % 10 이 바로 그 의미이다.
끝
'Algorithm > BACKJOON' 카테고리의 다른 글
[C++] 백준 2166번 문제 해설 (0) | 2022.06.29 |
---|---|
[C++] 백준 1305 번 문제 해설 (0) | 2022.06.03 |
[C++] 백준 19942 번 문제 풀이 (0) | 2021.08.08 |
[C++] 백준 2292 문제 해설 (0) | 2021.06.27 |
[C++] 백준 3273 문제 해설 (0) | 2021.06.26 |