문제링크
https://www.acmicpc.net/problem/1009
문제
재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
출력
각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.
해석
a의 b을 구하고 mode연산을 진행해도 될 것 같지만 자료형에서 오버플로우가 나기 때문에 해당 방법으로는 해결할 수 없다.
(a mod 10)을 b번 반복하는 방법을 이용하여 해결했다.
이 때 만약 a mod 10이 0이라면 해당 값을 10으로 바꿔줘야 오류가 나지 않는다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
using namespace std;
int main() {
int T, a, b;
cin >> T;
while (T--) {
cin >> a >> b;
int tmp = a % 10;
if (tmp == 0)
tmp = 10;
for (int i = 0; i < b - 1; i++) {
tmp = (tmp * a) % 10;
if (tmp == 0)
tmp = 10;
}
cout << tmp << endl;
}
}
|
cs |
Memo
브론즈 문제 풀면서 기뻐할 마음으로 풀었던 문제인데 다양한 오류를 경험할 수 있었다...;
자료형에서 오버플로우가 났었고, 어떤 수의 pow mod 10은 같은 수가 반복되기 때문에 해당 값들을 벡터에 넣어주고 돌리는 방식으로 했었는데 이것도 왠지 모르게 오류가 계속 났다.
마지막 방법으로 효율이 좋지 않을것이라고 생각했던 방법을 사용하여 해결하였다.(비교적 간단.)