유리수

유리수

보통

지침

유리수는 두 정수 a와 b의 몫으로 정의하고, a를 분자, b를 분모라고 해요. 단, b != 0이어야 해요.

유리수 r = a/b의 절댓값 |r|은 |a|/|b|와 같아요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 합은 r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂)예요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 차는 r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂)예요.

두 유리수 r₁ = a₁/b₁과 r₂ = a₂/b₂의 곱(곱셈)은 r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂)예요.

유리수 r₁ = a₁/b₁을 다른 유리수 r₂ = a₂/b₂로 나눈 값은 a₂가 0이 아닐 때 r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁)이에요.

유리수 r = a/b를 음이 아닌 정수 n 거듭제곱한 값은 r^n = (a^n)/(b^n)이에요.

유리수 r = a/b를 음의 정수 n 거듭제곱한 값은 r^n = (b^m)/(a^m)이고, 여기서 m = |n|이에요.

유리수 r = a/b를 실수(부동소수점) x 거듭제곱한 값은 (a^x)/(b^x)라는 몫이고, 이 값은 실수예요.

실수 x를 유리수 r = a/b 거듭제곱한 값은 x^(a/b) = root(x^a, b)이고, 여기서 root(p, q)는 p의 q제곱근이에요.

다음 연산을 구현해요:

  • 두 유리수의 덧셈, 뺄셈, 곱셈, 나눗셈,
  • 절댓값, 주어진 유리수의 정수 거듭제곱, 주어진 유리수의 실수(부동소수점) 거듭제곱, 실수의 유리수 거듭제곱.

유리수를 구현할 때는 항상 기약분수로 약분해야 해요. 예를 들어 4/4는 1/1로, 30/60은 1/2로, 12/8은 3/2로 약분되어야 해요.

유리수 r = a/b를 약분하려면 a와 b를 a와 b의 최대공약수(gcd)로 나눠요. 예를 들어 gcd(12, 8) = 4인 경우 r = 12/8은 (12/4)/(8/4) = 3/2로 약분할 수 있어요.

사용하는 프로그래밍 언어에는 유리수 구현이 없다고 가정해요.

트랙별 지침

  • 이 연습 문제에서는 연산자 오버로딩을 처음 다뤄요. 클래스 연산자를 재정의하는 방법과 Implicit, Explicit 형변환이 어떻게 가능한지 이해하는 데에는 이 주제를 다룬 Embarcadero docwiki가 큰 도움이 될 거예요.

출처

Wikipedia링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Delphi Pascal Exercism

유리수 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Delphi Pascal 트랙을 연습 문제 76개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.