소프트웨어/C++

[2003년 기말 5번] 최소공배수 / 최대공약수 - 나머지 / 반복문

카켈 2007. 2. 24. 05:17



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

문제

풀이

#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인 수

참고
  - 유사 문제