※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4626번 문제인 가글이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4626
4626번: 가글
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 N, D, B, E가 10진수로 한 줄에 하나씩 주어진다. N과 D는 유리수의 분자와 분모이고, 0 ≤ N ≤ 5,000, 1 ≤ D ≤ 5,000을 만족한다. B와
www.acmicpc.net
주어진 유리수를 7진법으로 나타냈을 때의 소수점 아래 특정 자릿수를 구하는 문제이다.
10진수의 나눗셈 과정을 다시 생각해보자. 남은 분자에 10을 곱하고 분모로 분자를 나눈 몫을 자릿수로 나타낸 다음 분자의 값을 분모로 나눈 나머지로 바꾸는 것을 반복하는 것으로 문제를 해결할 수 있을 것이다.
7진수의 나눗셈 또한 위의 과정과 크게 다르지 않다. 다른 점은 분자에 곱하는 값이 10이 아닌 7이 되는 것 하나뿐이다. 이를 구현해 문제를 해결하자.
입력으로 주어지는 유리수는 가분수일 수 있으므로 첫 자리를 구하기 전에 분자를 분모로 나눈 나머지로 바꿔야 함에 유의하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int T;
int A, B, L, R;
void solve() {
A %= B;
for (int i = 0; i <= R; i++) {
A *= 7;
int dgt = A / B; A %= B;
if (L <= i) cout << dgt;
}
cout << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
for (int t = 1; t <= T; t++) {
cin >> A >> B >> L >> R;
cout << "Problem set " << t << ": " << A << " / " << B << ", base 7 digits " << L << " through " << R << ": ";
solve();
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28858 // C++] Пасьянс (0) | 2024.04.27 |
---|---|
[BOJ 11811 // C++] 데스스타 (1) | 2024.04.26 |
[BOJ 14515 // C++] Yin and Yang Stones (0) | 2024.04.24 |
[BOJ 4324 // C++] XYZZY (0) | 2024.04.23 |
[BOJ 23604 // C++] Chinese Remainder Theorem (0) | 2024.04.22 |