在Java中不使用int、Long、Double、String、BigDecimal存储两个整数乘法结果

在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中所有数字框类型的超类型): 请注意,必须将其中一个变量强制转换

所以问题就好像有一种方法,把两个int值作为参数,我们必须存储这两个整数的乘法,但不能存储在int,Long,Double,BigDecimal,String中。结果(乘法)的范围将超出整数范围

---- 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;
}