이 글에서는 C++의 ceil() 함수를 사용하지 않고 a/b의 올림(ceiling) 값을 구하는 방법을 알아봅니다. 예를 들어 a = 5, b = 4라면 a/b = 5/4 = 1.25이며, 이 값의 올림은 2가 됩니다.
핵심 공식
별도의 라이브러리 함수 호출 없이도 다음과 같은 간단한 정수 연산 공식만으로 올림 값을 계산할 수 있습니다.
$$ceil\lgroup a,b\rgroup=\frac{a+b-1}{b}$$
동작 원리
C++에서 정수 나눗셈은 소수점 이하를 버리는 특성이 있습니다. 분자에 (b - 1)을 미리 더해두면, 나눗셈 과정에서 나머지가 존재할 경우 몫이 1 증가하게 되어 자연스럽게 올림 효과를 얻을 수 있습니다. 반대로 a가 b로 정확히 나누어떨어지는 경우에는 (b - 1)을 더해도 몫이 변하지 않기 때문에 항상 올바른 결과를 보장합니다.
예제 코드
#include<iostream>
using namespace std;
int ceiling(int a, int b) {
return (a+b-1)/b;
}
int main() {
cout << "Ceiling of (5/4): " << ceiling(5, 4) <<endl;
cout << "Ceiling of (100/3): " << ceiling(100, 3) <<endl;
cout << "Ceiling of (49/7): " << ceiling(49, 7) <<endl;
}
실행 결과
Ceiling of (5/4): 2
Ceiling of (100/3): 34
Ceiling of (49/7): 7
결과 해석
- 5/4 = 1.25 → 올림하면 2
- 100/3 = 33.33... → 올림하면 34
- 49/7 = 7 (정확히 나누어떨어짐) → 그대로 7
주의 사항: 이 공식은 피연산자가 모두 양수일 때만 올바르게 동작합니다. 음수가 포함된 나눗셈에서는 C++의 정수 나눗셈이 0 방향으로 잘리기(truncation toward zero) 때문에 의도와 다른 결과가 나올 수 있으므로, 입력값의 부호를 반드시 확인해야 합니다.