반응형
https://www.acmicpc.net/problem/1009
코드
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a;
cin >> b;
long long result = 1;
for (int i = 0; i < b; i++)
{
result *= a;
result %= 10;
}
if (result == 0)
cout << 10 << endl;
else
cout << result << endl;
}
}
풀이
처음에 pow()함수를 써서 하면 간단하게 될 줄 알았는데 수가 커지니깐 오버플로우가 생겨서 값이 정상적으로 나오지 않았습니다. 그래서 for문을 사용해서 overflow가 나지 않도록 계속해서 %10을 해주면서 소거해주었습니다.
그리고 제가 마지막에 실수한 부분이 있었는데 바로 나머지가 10일 때 0이 나오는데 이 경우에 10번째 컴퓨터에 할당이 되는 것인데 이거를 고려해주지 않아서 계속 틀렸습니다. 0이면 10이 출력되어야 합니다.
1. 비교할 n cin 입력 후 for문을 만들어준다.
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a;
cin >> b;
for문을 만들어줍니다. 먼저 몇개를 입력받을지 n으로 정한 다음 a, b를 정의해줍니다.
2. result를 생성해준 다음에 result에 a를 b만큼 거듭제곱하는 for문을 만듦
long long result = 1;
for (int i = 0; i < b; i++)
{
result *= a;
result %= 10;
}
result의 기본값은 1로 받아줍니다. 그 다음 a를 곱하면서 b만큼 거듭제곱이 되게 합니다. 그리고 각 계산마다 %10을 해주어서 overflow를 방지해줍니다.
3. 만약 나머지가 0이면 10번째 컴퓨터로 나오게 해준다.
if (result == 0)
cout << 10 << endl;
else
cout << result << endl;
아마 정답률이 낮은 이유 중 하나라고 생각이 듭니다. result가 0이 나오면 10번째 컴퓨터에 할당된 것이므로 10을 출력하게 만들어줍니다.
주의할 점
- pow 함수를 사용하면 overflow가 발생하므로 pow를 사용할 때 주의해야 한다.
- 나머지가 필요한 것이므로 각각마다 나머지를 구해준다면 overflow 없이 가능하다.
- 10의 나머지가 0인데 0일 경우 10번째 컴퓨터에 할당되는 것이므로 10이 출력되도록 if문을 만들어주어야 한다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 1316번 그룹 단어 체커 (0) | 2024.04.07 |
---|---|
[C++] 백준 2941번 크로아티아 알파벳 (0) | 2024.03.31 |
[C++] 백준 1157번 단어 공부 (0) | 2024.03.30 |
[C++] 백준 10988번 팰린드롬인지 확인하기 (0) | 2024.03.29 |
[C++] 백준 2440번 별 찍기 -3 (0) | 2024.03.27 |