在Java中不使用int、Long、Double、String、BigDecimal存储两个整数乘法结果
所以问题就好像有一种方法,把两个int值作为参数,我们必须存储这两个整数的乘法,但不能存储在int,Long,Double,BigDecimal,String中。结果(乘法)的范围将超出整数范围在Java中不使用int、Long、Double、String、BigDecimal存储两个整数乘法结果,java,Java,所以问题就好像有一种方法,把两个int值作为参数,我们必须存储这两个整数的乘法,但不能存储在int,Long,Double,BigDecimal,String中。结果(乘法)的范围将超出整数范围 ---- method(int a,int b){ return a*b; } 因此,方法签名中的破折号表示面试官正在寻找的理想返回类型。您可以使用long基元类型或返回java.lang.Number对象类型(java中所有数字框类型的超类型): 请注意,必须将其中一个变量强制转换
---- method(int a,int b){
return a*b;
}
因此,方法签名中的破折号表示面试官正在寻找的理想返回类型。您可以使用long基元类型或返回java.lang.Number对象类型(java中所有数字框类型的超类型): 请注意,必须将其中一个变量强制转换为long
注意:此解决方案要求修改方法主体 您可能可以使用以下代码段:
public boolean[] method(int a, int b){
boolean[] bits = new boolean[64]; // max amount of long bits
for(long l = 0, bit = 1; l < bits.length; l++){
bits[(int) l] = (((long) a * b) & bit) == bit;
bit <<= 1;
}
return bits;
}
public boolean[]方法(int a,int b){
boolean[]位=新的boolean[64];//长位的最大数量
for(长l=0,位=1;l 在不使用的返回类型列表中,您是否错过了biginger
?不能使用int和Integer中更大的值。您不能使用Long
,但可以使用Long
?请注意,除了int
,返回任何值都没有意义,因为这是a*b
的类型。换句话说:c将返回类型从int挂起是没有意义的,您已经丢失了信息。如果您不想避免溢出,那么为什么返回类型必须是int
以外的类型?在面试中被问到一个问题并不一定是一个好问题。乘以a*b
就是一个int,并且是位移位整数在32位后换行。这不会像写的那样起作用。@AndyTurner您是对的,可能会有一个删除溢出的建议?总是将其中一个变量强制转换为long
或其他什么?是的,这会起作用。@AndyTurner数组创建boolean[]bits=new boolean[long.bitCount((long)a*b)]
stills产生的数组太小,也许你有什么想法?不要使用位计数。它计算设置位的数量。你可以使用其他方法,但为什么不选择64位呢?
public boolean[] method(int a, int b){
boolean[] bits = new boolean[64]; // max amount of long bits
for(long l = 0, bit = 1; l < bits.length; l++){
bits[(int) l] = (((long) a * b) & bit) == bit;
bit <<= 1;
}
return bits;
}