
이 문제는 전에 풀었던 문제와 비슷하게 접근을 시작하면 된다. 이 문제는 2와 5로 나눠지지 않는 수인 n을 입력을 받고 1이 n개의 수가 나눠지는 수를 구하면 된다. 3을 입력을 받으면 111이라는 값을 가지게 되는데. 이 값을 0으로 나눠떨어지는 수인 3을 출력을 하면 되고, 7을 입력받으면 1,111,111를 가지게 되는데, 이 값이 0으로 떨어지는 수를 구하면 되는 것이다. 하지만 예제 입력에는 9901이라는 수를 입력 받게 되는데, 9901은 1이 9901개라는 수를 가지게 되며, 이 수는 long long을 넘게 되는 수를 가지게 된다.
그렇다면 어떻게 오버플로우를 방지하는 방법이 있느냐, 그 방법은 num = (num * 10) + 1을 하게 되면, 1, 11, 111, 1111..을 만들 수 있는데, 이 것을 하는 동시에 바로 입력받은 n을 나눠주면 해결 된다는 것을 알 수 있다.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main() {
int n;
unsigned long long int num = 1;
unsigned long long int result = 0;
while (cin >> n) {
num = 1; result = 1;
while (true) {
// 만약 0으로 나눠질때
if (num % n == 0) {
cout << result << "\n";
break;
}
// 만약 안나눠 지면
else {
// 1 * 10 + 1 => 11
num = (num * 10) + 1;
// n씩 나눠주면서 overflow안나게 만들기
num %= n;
result++;
}
}
}
}