문제 링크입니다: https://www.acmicpc.net/problem/10696
초기에는 Big Integer를 이용해 계산하는 방법을 떠올렸지만 구현하기가 힘들 것 같아서 다른 방법을 생각해봤습니다.
알고리즘은 생각보다 간단합니다.
1. 제일 큰 자릿수부터 X에 대한 나머지(remainder)를 구합니다.
2. 이후에는 (remainder * 10 + 현재 자릿수)의 X에 대한 나머지를 remainder에 저장해줍니다. (한 자리씩 더 파악)
3. 모든 자릿수에 대해 2번을 반복한 뒤 remainder를 출력해주면 됩니다.
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int test_case;
cin >> test_case;
for (int t = 0; t < test_case; t++)
{
string num;
int divisor;
cin >> num >> divisor;
long long remainder = 0;
for (int i = 0; i < num.size(); i++)
{
int digit = num[i] - '0';
remainder = (remainder * 10 + digit) % divisor;
}
cout << "Case " << t + 1 <<": " << remainder << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 15752번 Hoofball (0) | 2018.09.15 |
---|---|
백준 15751번 Teleportation (0) | 2018.09.15 |
백준 3040번 백설 공주와 일곱 난쟁이 (0) | 2018.09.14 |
백준 2822번 점수 계산 (0) | 2018.09.14 |
백준 11774번 MOLEKULE (0) | 2018.09.14 |