> 백엔드 개발 > C++ > C++에서 Midy의 정리

C++에서 Midy의 정리

WBOY
풀어 주다: 2023-09-11 22:57:02
앞으로
1375명이 탐색했습니다.

C++에서 Midy의 정리

우리는 분자를 저장할 정수 값 a_num과 소수여야 하는 분모를 저장할 p_den을 얻습니다. a_num을 p_den으로 나눈 연산이 midy 정리를 증명하는지 확인하는 작업입니다.

미디의 정리를 증명하는 단계는 다음과 같습니다.

  • 입력 분자는 a_num이고 분모는 p_den이므로 항상 소수여야 합니다.

  • 숫자를 나눕니다. 반복되는 소수 값을 확인하세요.

  • 반복되지 않을 때까지 소수 값을 저장합니다.

  • 숫자가 중복되는지 확인하고, 그렇다면 반으로 나눕니다.

  • 두 숫자를 더합니다. 출력이 9의 문자열이면 Midy의 정리를 증명합니다.

이 상황에 대한 다양한 입력 및 출력 시나리오를 살펴보겠습니다.

In − int a_num = 1 및 int p_den = 19

출력 − 반복 소수점은 다음과 같습니다. 052631578947368421 Midy의 정리 증명

설명 − 위의 단계에 따라 Midy의 정리를 확인하세요.

  • 나누기 1/19 = 052631578947368421

  • 반복되는 십진수 값은 -: 052631578947368421입니다.

  • 숫자를 반으로 자릅니다(예: 052631578 947368421).

  • 두 개의 반쪽을 더하면 052631578 + 947368421 = 999,999,999가 됩니다.

  • 보시다시피 999,999,999는 미디의 정리를 증명하는 9의 문자열입니다.

  • ul>

    Input −int a_num = 49, int p_den = 7

    Output − 반복되는 소수 없음

    설명− 보시다시피 49/7은 작은 숫자 값을 생성하지 않습니다. 49는 정확히 7로 나누어 떨어지기 때문입니다. 따라서 출력은 "반복 소수점 없음"입니다.

    다음 프로그램에서 사용한 방법은 다음과 같습니다.

    • 정수 값을 int a_num, int p_den으로 입력합니다.

    • Midy의 정리를 증명하려면 Midys_theorem(a_num, p_den)이라는 함수를 호출하세요.

    • 함수 check_Midys()에서

      • int로 처음부터 0, int에서 끝으로 0으로 변수를 만듭니다.

      • 함수 check(val)가 FALSE를 반환하는지 확인하고 Midy의 정리를 인쇄합니다. .

      • ELSE IF len % 2 = 0 그런 다음 i가 len/2보다 작을 때까지 i에서 0까지 FOR 반복을 시작하고 첫 번째를 첫 번째 * 10 + (str[i] - '0')으로 설정하고 마지막을 마지막으로 설정합니다. * 10 + (str[len / 2 + i] - '0') 증명된 Midy 정리를 인쇄합니다.

    • ELSE, print Midy 정리는 적용되지 않습니다.

    • 함수 Midys_theorem(int a_num, int p_den)

      • 에서는 정수 유형 값을 map_val에 매핑하고 삭제하는 맵 유형 변수를 생성합니다. 지도.

      • 알림을 a_num % p_den으로 설정하세요.

      • 알림이 없고 map_val.find(reminder)가 map_val.end()와 같으면 0으로 시작하고 map_val[reminder]를 result.length()로 설정하고, 알림은 알림 * 10, 임시는 알림으로 설정합니다. /p_den, 결과 결과 + to_string(temp) 및 % p_den을 상기시킵니다.

      • IF 나머지 = 0을 확인한 다음 -1 ELSE를 반환하고 개수를 다음으로 설정합니다. result.substr(map_val[reminder])

      • 반환 횟수

    • function 내부 bool check(int val)

      • i가 val/2보다 작을 때까지 i에서 2까지 FOR 루프를 시작합니다. IF val % i = 0인지 확인하고 FALSE를 반환하고, 그렇지 않으면 TRUE를 반환합니다.

    예제

    #include <bits/stdc++.h>
    using namespace std;
    bool check(int val){
       for(int i = 2; i <= val / 2; i++){
          if(val % i == 0){
             return false;
          }
       }
       return true;
    }
    void check_Midys(string str, int val){
       int len = str.length();
       int first = 0;
       int last = 0;
    
       if(!check(val)){
          cout<<"\nNot applicable for Midy&#39;s theorem";
       }
       else if(len % 2 == 0){
          for(int i = 0; i < len / 2; i++){
             first = first * 10 + (str[i] - &#39;0&#39;);
             last = last * 10 + (str[len / 2 + i] - &#39;0&#39;);
          }
          cout<<"\nProved Midy&#39;s theorem";
       }
       else{
          cout<<"\nNot applicable for Midy&#39;s theorem";
       }
    }
    string Midys_theorem(int a_num, int p_den){
       string result;
       map<int, int> map_val;
       map_val.clear();
    
       int reminder = a_num % p_den;
    
       while((reminder != 0) && (map_val.find(reminder) == map_val.end())){
          map_val[reminder] = result.length();
          reminder = reminder * 10;
          int temp = reminder / p_den;
          result += to_string(temp);
          reminder = reminder % p_den;
       }
       if(reminder == 0){
          return "-1";
       }
       else{
          string count = result.substr(map_val[reminder]);
          return count;
       }
    }
    int main(){
       int a_num = 1;
       int p_den = 19;
       string result = Midys_theorem(a_num, p_den);
       if(result == "-1"){
          cout<<"No Repeating Decimal";
       }
       else{
          cout<<"Repeating decimals are: "<<result;
          check_Midys(result, p_den);
       }
       return 0;
    }
    로그인 후 복사

    Output

    위 코드를 실행하면 다음과 같은 출력이 생성됩니다

    Repeating decimals are: 052631578947368421
    Proved Midy&#39;s theorem
    로그인 후 복사

위 내용은 C++에서 Midy의 정리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿