※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 4328번 문제인 기초 나머지 계산이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/4328 

 

4328번: 기초 나머지 계산

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 3개의 정수가 한 줄로 이루어져 있다. 첫 번째 숫자는 b이고, 2보다 크거나 같고, 10보다 작거나 같은 값을 가진다. 두 번째

www.acmicpc.net

2 이상 10 이하의 10진수 정수 b, b진법 1000자리(이하)수 p, b진법 9자리(이하)수 m이 주어질 때 b를 p로 나눈 "나머지"를 구하는 문제이다. 단, 문제의 나머지 정의에 따르면 m=0인 경우 p를 출력해야한다. 아래는 m=0인 경우를 제외하고 설명한다.

 

1000자리 수를 정수로 보관하는 대신문자열로 보관하면 쉽게 수를 읽어올 수 있다.

 

정답 또한 b진법 수로 출력해야 함에 유의하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int b; string p, mm;
	while (cin >> b >> p >> mm) {
		int m = 0;
		for (auto l : mm) m = m * b + l - '0';

		if (m == 0) {
			cout << p << '\n';
			continue;
		}

		int ans = 0;
		for (auto l : p) {
			ans = ans * b + l - '0';
			ans %= m;
		}

		if (ans == 0) {
			cout << 0 << '\n';
			continue;
		}

		stack<int> stk;
		while (ans) {
			stk.push(ans % b);
			ans /= b;
		}
		while (!stk.empty()) {
			cout << stk.top();
			stk.pop();
		}

		cout << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 14713 // C++] 앵무새  (0) 2022.07.10
[BOJ 25024 // C++] 시간과 날짜  (0) 2022.07.10
[BOJ 15240 // C++] Paint bucket  (0) 2022.07.10
[BOJ 1600 // C++] 말이 되고픈 원숭이  (0) 2022.07.10
[BOJ 24954 // C++] 물약 구매  (0) 2022.07.10

+ Recent posts