2와 5로 나누어떨어지지 않는 정수 n이 주어졌을 때, 각 자릿수가 모두 1로만 이루어진 n의 배수 중 가장 작은 수의 자릿수를 출력하는 문제.
1로만 이루어진 정수의 자릿수를 하나씩 늘려가며, 그때마다 정수가 n
으로 나누어떨어지는지 확인한다.
자릿수를 늘리는 과정에서 val
이 너무 커지지 않도록, n
으로 나누어 나머지를 구해주며 계산한다.
문제에 입력 값을 종료하는 조건이 명시되어 있지 않으므로, while (scanf("%d", &n) != EOF)
를 사용한다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
while (scanf("%d", &n) != EOF) {
ll cnt = 1, val = 1;
while (1) {
if (!(val % n)) {
cout << cnt << '\n';
break;
}
val = (val * 10 + 1) % n;
cnt++;
}
}
return 0;
}