우리는 분자를 저장할 정수 값 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의 문자열입니다.
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'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
위 내용은 C++에서 Midy의 정리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!