분자를 저장할 a_num과 소수여야 하는 분모를 저장할 p_den으로 정수 값이 제공됩니다. p_den으로 나눈 후 _num에 대해 수행한 연산이 midy's theorem을 증명하는지 확인하는 작업입니다.
미디의 정리를 증명하는 단계는-
-
분자는 a_num으로, 분모는 p_den으로 입력하며 항상 소수여야 합니다.
-
숫자를 나눕니다. 반복되는 소수 값을 확인하십시오.
-
10진수 값이 반복되지 않을 때까지 저장합니다.
-
숫자가 짝수인지 확인하고 맞으면 반으로 나눕니다.
-
두 숫자를 모두 더하십시오. 출력이 9의 문자열이면 Midy의 정리를 증명합니다.
이에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다. -
에서 - int a_num =1 및 int p_den =19
밖으로 − 반복 소수점은 다음과 같습니다. 052631578947368421 미디의 정리 증명
설명 − 위에서 언급한 단계에 따라 Midy의 정리, 즉
를 확인합니다.-
나누기 1 / 19 =052631578947368421
-
반복되는 10진수 값은 052631578947368421입니다.
-
숫자를 반으로 나눕니다(예:052631578 947368421).
-
두 반쪽을 모두 추가합니다(예:052631578 + 947368421 =999,999,999).
-
보시다시피 999,999,999는 Midy의 정리를 증명하는 9의 문자열입니다.
에서 -int a_num =49, 정수 p_den =7
밖으로 − 소수점 이하 반복 없음
설명 − 49/7은 49를 7로 완전히 나눌 수 있기 때문에 10진수 값을 생성하지 않는 것을 볼 수 있습니다. 따라서 출력은 No Repeating Decimal입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
정수 값을 int a_num 및 int p_den으로 입력합니다.
-
Midys_theorem(a_num, p_den)으로 함수를 호출하여 Midy의 정리를 증명합니다.
-
check_Midys()
함수 내부-
int 처음부터 0까지 변수를 만들고 int 마지막으로 0
-
check(val) 함수가 FALSE를 반환하는지 확인한 다음 Midy의 정리를 적용할 수 없음을 출력합니다.
-
ELSE IF len % 2 =0 그런 다음 루프 FOR를 i에서 0까지 시작하여 i가 len/2보다 작을 때까지 처음으로 설정하고 처음으로 * 10 + (str[i] - '0')으로 설정하고 마지막에서 마지막으로 * 10 + (str[ len / 2 + i] - '0') 및 인쇄는 미디의 정리를 증명했습니다.
-
-
그렇지 않으면 Midy의 정리를 적용할 수 없습니다.
-
Midys_theorem(int a_num, int p_den)
함수 내부-
지도 유형 변수를 생성하여 정수 유형 값을 map_val로 매핑하고 지도를 지웁니다.
-
알림을 a_num % p_den으로 설정합니다.
-
미리 알림이 0과 같지 않고 map_val.find(reminder)가 map_val.end()와 같은 동안 시작한 다음 map_val[reminder]를 result.length()로 설정하고, 알림을 알림 * 10으로, 임시를 알림 / p_den으로, 결과를 결과 +로 설정합니다. to_string(temp) 및 알림 % p_den에 대한 알림
-
IF 나머지 =0을 확인한 다음 -1 ELSE를 반환하고 카운트를 설정합니다. toresult.substr(map_val[reminder])
-
반품 횟수
-
-
함수 내부 bool check(int val)
-
i가 val/2보다 작아질 때까지 루프 FOR를 i에서 2로 시작합니다. 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's theorem"; } else if(len % 2 == 0){ for(int i = 0; i < len / 2; i++){ first = first * 10 + (str[i] - '0'); last = last * 10 + (str[len / 2 + i] - '0'); } cout<<"\nProved Midy's theorem"; } else{ cout<<"\nNot applicable for Midy'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; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Repeating decimals are: 052631578947368421 Proved Midy's theorem