올림, 반올림, 내림 코드로 처리

jh Seo·2025년 7월 3일
0

C++공부

목록 보기
24/24

개요

대부분 math 라이브러리에 ceil() , floor(), round()함수는 구현되어 있지만
알고리즘 코딩에서 시간을 더욱 단축시키기 위한 공식들이 있었다.
다음은 기초적인 올림, 반올림, 버림을 처리하는 공식들이다

올림 ceil()

양수일 때

ab=a+b1b\left\lceil \frac{a}{b} \right\rceil = \frac{a + b - 1}{b}

int a를 int b로 나눌때 값의 올림은 (a+b-1 )/ b로 하면 된다.

음수일 때

두 값의 부호에 따라 갈라짐

//양양 음음일때
if ((a >= 0 && b > 0) || (a < 0 && b < 0))
    return (a + b - 1) / b;
else
    return a / b;


반올림 round()

양수일 때

(ab)=(a+b2b)\left( \frac{a}{b} \right) = \left( \frac{a + \frac{b}{2}}{b} \right)

int a를 int b로 나눌 때 값의 반올림 공식은 (a+ b/2 ) / b로 처리하면 된다.

음수일 때

부호 반대로 처리하면된다

  • b의 절대값 기준으로 처리해야함
//양양 음음일 때
    if ((a >= 0 && b > 0) || (a < 0 && b < 0))
        return (a + abs(b) / 2) / b;
    else
        return (a - abs(b) / 2) / b;

내림 floor()

ab=a/b\left\lfloor \frac{a}{b} \right\rfloor = a / b

대부분 코드에서 a와 b가 int일때 /연산은 내림 처리한다.

  • 음수에서는
int result = a / b;
if (a % b != 0 && ((a < 0) != (b < 0))) {
    result--; 
}

이렇게 처리해야한다.

profile
코딩 창고!

0개의 댓글