목적
  - 최대 공약수와 최소 공배수를 C++ 에서 구현한다.

문제
사용자 삽입 이미지

  - 실행 결과는 위의 그림이 나오지 않습니다. 최소 공배수가 다릅니다.

사용자 삽입 이미지


코드

#include <iostream>

using namespace std;

int main(void)
{
 int iA, iB, iC, iGCM, iLCM, iMin, iMax, i;
 iA = iB = iC = iMin = iLCM = iMax = 0;
 i = iGCM = 1;

 cout << "세개의 정수 입력: ";
 cin >> iA >> iB >> iC;

 iMax = iA;
 iMax = iB > iMax ? iB : iMax;
 iMax = iC > iMax ? iC : iMax;

 iMin = iA;
 iMin = iB < iMin ? iB : iMin;
 iMin = iC < iMin ? iC : iMin;

 while(i <= iMin)
 {
  if(iA % i == 0 && iB % i == 0  && iC % i == 0)
   iGCM = iGCM < i ? i : iGCM;
  i++;

 }

 i = iMax;
 while(i <= iA * iB * iC)
 {
  if( i % iA == 0 && i % iB == 0 && i % iC == 0)
  {
   iLCM = i;
   break;
  }

  i++;
 }


 cout << "최대 공약수 : ";
 cout << iGCM << endl;
 cout << "최소 공배수 : ";
 cout << iLCM << endl;

 return 0;
}

해설
  - 최소 공배수는 최대값을 시작으로 세수로 나눈 나머지가 0인 첫번째 수를 최대 공약수는 1부터 최소값까지 나머지가 0인 최대값을 구하면 됩니다.

참고
  - 유사 문제

Posted by 카켈



목적
  - 최소공배수와 최대공약수를 구하기 위한 조건과 반복문 나눗셈 사용을 익힌다.

문제
사용자 삽입 이미지

풀이

#include <iostream>

using namespace std;

int main(void)
{
 int iA, iB, iLCM, iGCD, iStart, iEnd ; // iLCM : 최소공배수 iGCD : 최대공약수
 iA = iB = iLCM = iGCD = iStart = iEnd = 0;

 cout << "두 정수값을 입력하세요 : ";
 cin >> iA >> iB;

 iStart = iA <= iB ? iA : iB;
 iEnd = iA <= iB ? iB : iA;
 iA = iStart;
 iB = iEnd;

 // LCM, GCD 계산
 for(iStart = 1; iStart <= iEnd; iStart++)
  if(iA % iStart == 0 && iB % iStart == 0)
   iGCD = iGCD < iStart ? iStart : iGCD;

 for(iStart = iB; iStart <= iA * iB; iStart++)
  if(iStart % iA == 0 && iStart % iB == 0)
  {
   iLCM = iStart;
   break;
  }
 
 cout << iA << " 과 " << iB << " 의 최대공약수 : " << iGCD << endl;
 cout << iA << " 과 " << iB << " 의 최소공배수 : " << iLCM << endl;

 return 0;
}

해설
  - 최대공약수 : 1에서 큰수까지 1씩 증가하며 가는데 작은수 와 큰수 모두 나머지가 0인 수
  - 최소공배수 : 큰수에서 두수의 곱까지 1씩 증가하는데 그수와 두수 모두의 나머지가 0인 수

참고
  - 유사 문제

Posted by 카켈




1. 목적

  - 최소공배수 / 최대공약수 를 C 로 구현한다.

2. 문제 (점수 : 15 점)
  - 크기와 관계 없는 두개의 정수를 입력 받아 최대공약수와 최소공배수를 찾는다.
  - 실행결과

정수값 두개를 입력하세요 : 120 750
최대 공약수 : 30
최소 공배수 : 3000
Press any key to continue

3. 이해
  - 최소공배수와 최대공약수를 이해하는가?
  - 조건에 맞는 반복문을 구현할수 있는가?

4. 코드

#include <stdio.h>

int main()
{
 int a, b, start, end;
 a = b = start = end = 0;
 printf("정수값 두개를 입력하세요 : ");
 scanf("%d %d", &a, &b);

 start = a > b ? b : a;
 end = a < b ? b : a;

 a = b = 1;

 for(a = 1; a <= start; a++)
 {
  if(start % a == 0 && end % a == 0)
   b = a > b ? a : b;
 }

 printf("최대 공약수 : %d\n", b);

 a = start;
 b = 0;

 while(a <= start * end)
 {
  if(a % start == 0 && a % end == 0)
  {
   b = a;
   break;

  }

  a++;

 }

 printf("최소 공배수 : %d\n", b);

 return 0;
}

5. 해설
  - 최대공약수는 1 부터 큰수 까지 두수 모두 나머지가 0이 되는 가장큰수를 의미합니다.
  - 최소공배수는 작은수에서 시작하여 두수 모두 나머지가 0이 되는 가장 작은 수를 의미합니다.
  - 두가지 모두 for 문 / while 문으로 구현했습니다.

6. 참고
  - 유사 문제 (다른 것)

Posted by 카켈
이전페이지 1 다음페이지