Java 为什么我得到-2147483648和-1';s乘法,负数,即-2147483648,应为+;2147483648
这是我在Leetcode中为解决这个问题而编写的代码片段Java 为什么我得到-2147483648和-1';s乘法,负数,即-2147483648,应为+;2147483648,java,integer,Java,Integer,这是我在Leetcode中为解决这个问题而编写的代码片段 public static int quotient(int dividend,int divisor){ int n=Math.abs(divisor),count=0,ans=Integer.MAX_VALUE-1; if(Math.abs(dividend)==1 && Math.abs(divisor)==1){ return dividend*diviso
public static int quotient(int dividend,int divisor){
int n=Math.abs(divisor),count=0,ans=Integer.MAX_VALUE-1;
if(Math.abs(dividend)==1 && Math.abs(divisor)==1){
return dividend*divisor;
}
else if(Math.abs(divisor)==1){
if(dividend<0 && divisor<0)
return Math.abs(dividend);
return dividend*divisor;
}
else if(dividend==0){
return 0;
}
else {
while (true) {
if (n > Math.abs(dividend)) {
ans = count;
break;
} else if (n == Math.abs(dividend)) {
ans = count + 1;
break;
} else {
n += Math.abs(divisor);
count++;
}
}
}
if((dividend<0 && divisor>0) || (dividend>0 && divisor<0))
ans*=-1;
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int dividend=sc.nextInt();
int divisor = sc.nextInt();
int ans=quotient(dividend,divisor);
System.out.println(ans);
公共静态整数商(整数被除数,整数除数){
int n=Math.abs(除数),count=0,ans=Integer.MAX_值-1;
if(数学abs(被除数)==1&&Math.abs(除数)==1){
回报红利*除数;
}
else if(数学abs(除数)==1){
如果(dividend0和&divisor我认为这是一个整数溢出。如图所示,长整数的最大值是2147483647
,并且没有2147483648
这样的int
值,因此在添加1
时,它会转到-2147483648
作为下一个整数。您可以尝试Long
类型来解决这个问题问题是,在Java中,它的最大值是9223372036854775807
(太多了).Java中的长整数最大值为2147483648
,最小值为负2147483648
。我不知道为什么会出现这个问题,但这可能会有帮助。@Yan,不是真的。@fluffy,检查这个链接@Yan,int
最大值正好是+2u 483_647
,而不是+2147483648
它根本不能用32位整数保存。@fluffy,对不起,这只是一个输入错误。