Попытка найти причину возможного переполнения в моем подходе при попытке решить - PullRequest
1 голос
/ 07 февраля 2020

Я решаю вопрос

Найти общее число, которое меньше чем равно A и делится на B и C.

Я написал следующая функция для вычисления того же

 public int solve(int A, int B, int C) {
        if(B==C){
            return A/B;
        }else{
            return A/(B*C);
        }
    }

Хотя это дает мне правильный ответ, но это склонно к переполнению; Я подозреваю, что это будет, когда мы умножаем b и c. Я не могу понять, как я могу исправить эту функцию, чтобы преодолеть переполнение.

Я не ищу конкретный c ответ, но больше заинтересован в знании

  1. Я прав?
  2. Подсказки к возможной коррекции

1 Ответ

1 голос
/ 07 февраля 2020

Ваша реализация неверна . Пример счетчика:

A = 100
B =  10
C =   8
  • Ожидаемый: 2 (цифры 40 и 80)
  • Факт: 1 (A / (B * C) == 100 / 80 == 1)

Правильная формула:

A / (B * C / gcd(B, C))

, где gcd обозначает наибольший общий делитель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...