Привет, все, что мне было интересно, есть ли способ реализовать этот метод без приведения к более широкому типу данных (например, long, double и т. Д.)?
CanTimes(int a, int b){
returns true if a * b is within the range of -2^31 to 2^31-1, else false;
}
Например, мы могли бы реализовать один для метода CanAdd
(без приведения) следующим образом:
public static boolean CanPlus(int a, int b) {
if (b >= 0) {
return a <= Integer.MAX_VALUE - b
} else {
return a >= Integer.MIN_VALUE - b
}
}
Язык реализации - Java, хотя, конечно, это больше не зависит от языка.
Я думал, есть ли какая-то логика, которую мы можем использовать, чтобы решить, соответствует ли a * b диапазону целого числа, не приводя его к более широкому типу данных?
Решение! на основании комментария Стрелка:
public static boolean CanTimes(int a, int b) {
if (a == 0 || b == 0) {
return true;
}
if (a > 0) {
if (b > 0) {
return a <= Integer.MAX_VALUE / b;
} else {
return a <= Integer.MIN_VALUE / b;
}
} else {
if (b > 0) {
return b <= Integer.MIN_VALUE / a;
} else {
return a <= -Integer.MAX_VALUE / b;
}
}
}