https://www.acmicpc.net/problem/1009
정수 a와 b가 주어지면 1~a^b까지의 수를 1번부터 10번 컴퓨터로 보내야 한다.
공교롭게도 b의 크기가 최대 1000000이어서 직접 수를 구해 컴퓨터에 집어넣는다는 생각은 접어야 한다.
그러나 a를 b번 곱하더라도 일의 자리 한 자리만 생각한다면 수가 너무 커지는 것을 걱정할 필요가 없다.
예를들어 9를 625번 곱하는 경우를 생각해보자.
9 * (9*9*...*9)에서 오른쪽 그룹에 있는 9를 하나 가져와 왼쪽의 9와 곱한다.
그러면 81 * (9*9*...*9)가 되는데 일의 자리 한 자리만 생각해서 1 * (9*9*...*9)로 봐도 문제가 없다.
어차피 컴퓨터가 10대 있기 때문에 일의 자리가 n인 것들은 n번 컴퓨터로 보내기 때문이다.
그래서 mult를 1로 초기화하고 mult = (mult * a)%10를 b번 반복한 후 mult를 출력하면 된다.
컴퓨터는 1~10번까지 있기 때문에 mult를 반복 연산후 얻게되는 0은 10이라 간주해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> using namespace std; int main() { int n; int a, b; cin >> n; for (int i = 0; i < n;i++) { cin >> a >> b; int mult = 1; for (int j = 1; j <= b;j++) { mult = (mult*a) % 10; } if(mult!=0) cout << mult<<endl; else cout << 10 << endl; } return 0; } | cs |
'백준' 카테고리의 다른 글
1260)DFS와 BFS (0) | 2019.03.16 |
---|---|
1012)유기농 배추2(DFS) (0) | 2019.03.16 |
3208)배고픈 애벌레 (0) | 2019.03.15 |
1373)2진수 8진수 (0) | 2019.03.11 |
1158)조세퍼스 문제 (0) | 2019.03.04 |