Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 1/n의 10진수 값으로 마침표 길이 찾기

<시간/>

숫자 n이 있다고 가정합니다. 1/n의 십진수 값에서 기간의 길이를 찾아야 합니다. 따라서 n의 값이 7이면 1/7 =0입니다.142857 142857… 굵은 글씨로 그 부분이 반복되고 있습니다. 여기에서 기간의 길이는 6입니다.

숫자 n의 경우 출력에 n개의 고유한 나머지가 있을 수 있지만 일부 초기 나머지가 반복되지 않으므로 기간은 첫 번째 나머지에서 시작되지 않을 수 있습니다. 따라서 우리는 기간의 나머지가 선택되었는지 확인하고 (n+1)번째 나머지부터 시작하여 다음 항목을 찾기 시작해야 합니다. (n+1)번째 나머지와 다음 발생 사이의 거리는 마침표의 길이입니다.

예시

#include<iostream>
using namespace std;
int periodLength(int n) {
   int remainder = 1;
   int length = 0;
   for (int i = 1; i <= n+1; i++)
   remainder = (10*remainder) % n;
   int d = remainder;
   do {
      remainder = (10*remainder) % n;
      length++;
   } while(remainder != d);
      return length;
}
int main() {
   int n = 7;
   cout << "Period length of 1/"<<n<<" is: " << periodLength(n) << endl;
}

출력

Period length of 1/7 is: 6