>백엔드 개발 >C++ >정수 나누기가 항상 반올림되도록 하려면 어떻게 해야 합니까?

정수 나누기가 항상 반올림되도록 하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-20 09:11:08284검색

How Can We Ensure Integer Division Always Rounds Up?

신뢰할 수 있는 정수 나눗셈 방법

정수 나누기는 기본적으로 0으로 반올림되므로 문제가 발생할 수 있습니다. 항상 정리하려면 더 나은 솔루션이 필요합니다.

기사에 제공된 예에서는 피연산자를 배정밀도 부동 소수점 숫자로 변환하고 Math.Ceiling()을 사용하는 것이 가능한 해결 방법이지만 이는 비표준적이고 비효율적인 것으로 간주됩니다.

다음 방법을 권장합니다.

1. 사양을 명확히 정의하세요

  • 가능한 모든 입력 시나리오를 식별하고 정의합니다.
  • 각 시나리오에서 예상되는 동작을 지정하세요.
  • 0 나누기 및 정수 오버플로에 대한 오류 처리가 포함됩니다.

2. 테스트 가능한 알고리즘 설계

  • 문제를 더 작은 단계로 나누기:

    • 정수몫을 계산합니다.
    • 나눗셈이 나누어지는지(나머지 없음) 확인합니다.
    • 반올림 방향을 결정하려면 피연산자의 부호를 확인하세요.

3. 솔루션 구현

다음은 구현 예입니다.

<code class="language-java">public static int DivRoundUp(int dividend, int divisor) {
    if (divisor == 0) throw new IllegalArgumentException("除数为零");
    if (divisor == -1 && dividend == Integer.MIN_VALUE) throw new ArithmeticException("整数溢出");

    int quotient = dividend / divisor;
    boolean dividedEvenly = (dividend % divisor) == 0;

    if (dividedEvenly)
        return quotient;

    boolean roundedDown = ((divisor > 0) == (dividend > 0));
    return roundedDown ? quotient + 1 : quotient;
}</code>

이 알고리즘은 나눌 수 없는 모든 나누기 결과를 반올림하는 지정된 동작을 따릅니다. 또한 오버플로 및 0으로 나누기 오류를 매우 잘 처리합니다. 이것이 가장 우아한 솔루션은 아니지만 명확하고 테스트 가능하며 정확합니다.

위 내용은 정수 나누기가 항상 반올림되도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.