개요
이 튜토리얼에서는 C++을 활용해 aⁿ과 bⁿ 중 어느 값이 더 큰지 판별하는 프로그램을 살펴봅니다.
세 개의 정수 a, b, n이 주어졌을 때, aⁿ과 bⁿ을 계산한 결과 중 더 큰 값을 찾아 출력하는 것이 과제입니다.
접근 방법
n이 커지면 aⁿ과 bⁿ을 직접 계산하는 과정에서 오버플로우가 발생할 위험이 있습니다. 다행히 두 값을 실제로 구하지 않아도 비교만으로 결과를 얻을 수 있으며, 핵심은 지수 n의 홀짝 여부입니다.
- n이 짝수인 경우: 음수를 짝수 번 곱하면 양수가 되므로, a와 b의 절댓값(|a|와 |b|)을 비교하면 됩니다.
- n이 홀수인 경우: 거듭제곱 후에도 부호가 유지되므로, a와 b를 있는 그대로 비교합니다.
예를 들어 a = -5, b = 3일 때 n = 2라면 (-5)² = 25이고 3² = 9이므로 aⁿ이 더 큽니다. 반면 n = 3이라면 (-5)³ = -125이고 3³ = 27이므로 bⁿ이 더 커집니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 더 큰 값을 찾는 함수
void findGreater(int a, int b, int n){
if (!(n & 1)) {
a = abs(a);
b = abs(b);
}
if (a == b)
cout << "a^n is equal to b^n";
else if (a > b)
cout << "a^n is greater than b^n";
else
cout << "b^n is greater than a^n";
}
int main(){
int a = 12, b = 24, n = 5;
findGreater(a, b, n);
return 0;
}
실행 결과
b^n is greater than a^n
코드 설명
findGreater 함수는 먼저 !(n & 1) 조건으로 n이 짝수인지 확인합니다. 비트 AND 연산자를 사용해 n의 최하위 비트를 검사하는 방식으로, n이 짝수라면 abs() 함수를 통해 a와 b를 절댓값으로 변환합니다.
이후 a와 b의 크기를 단순 비교하여 세 가지 경우(aⁿ = bⁿ, aⁿ > bⁿ, bⁿ > aⁿ)에 맞는 메시지를 출력합니다.
예제에서는 a = 12, b = 24, n = 5가 주어졌습니다. n = 5는 홀수이므로 절댓값 변환 없이 12와 24를 직접 비교하게 되고, 12 < 24이므로 "b^n is greater than a^n"이 출력됩니다.