https://www.acmicpc.net/problem/4375
```C++
#include <iostream>
using namespace std;
long long n;
int main()
{
while (scanf("%d",&n) != EOF)
{
long long count = 1, cnt = 1;
while (cnt % n != 0)
{
cnt = cnt * 10 + 1;
cnt %= n;
count++;
}
cout << count << endl;
}
}
```
- 앞서 곱셈을 풀었던 것 처럼 풀면 되는 문제였다
- 분배법칙과 $n^8 = n^4 * n^4$ 이것을 이용하는 문제이다
- scanf(%d, &n) != EOF를 이용하면 된다
- EOF란?
- End Of File의 약자로 파일의 끝 또는 종료를 나타낸다
- 그래서 잘못된 값을 입력해 EOF를 만나면 -1을 리턴하므로 무한루프를 탈출할 때 많이 사용한다
- 자리수는 1의 자리부터 시작하고 각 자리수가 모두 1로 이뤄져야 하므로 count와 cnt 변수 둘다 1로 초기화해준다
- cnt % n != 0일동안 while문을 통해 계산을 해줄것이다
- 일단 while문에 들어왔단 것은 1 % n 이 0이 아닌것이므로 cnt = cnt * 10 + 1을하여 11, 111...을 만들어준다
- cnt %= n을 통해 11 % n , 111 % n ...을 연산하고 count++을 통해 자리수를 늘려준다
- while문 조건에 비교하여 참이면 계속 while문을 돌것이고 그렇지 않다면 탈출을 통해 count를 출력해주면 되는 문제이다
'코딩 태스트 > 문제풀이' 카테고리의 다른 글
유기농 배추(x) (0) | 2025.01.10 |
---|---|
미로 탐색(x) (0) | 2025.01.10 |
곱셈(x) (0) | 2025.01.10 |
좋은 단어 (0) | 2025.01.10 |
주몽(X) (0) | 2025.01.10 |