将两个整数相除,要求不使用乘法、除法和 mod 运算符。
如果溢出,返回 2147483647 。
样例
如果溢出,返回 2147483647 。
样例
给定被除数 = 100 ,除数 = 9,返回 11。
package com.nuaa.sg;
import java.util.Scanner;
/**
* 将两个整数相除,要求不使用乘法、除法和 mod 运算符。
如果溢出,返回 2147483647 。
样例
给定被除数 = 100 ,除数 = 9,返回 11。
*
* @author Dell
*
*/
public class Test414 {
public static int divide(int dividend, int divisor)
{
if(divisor==0)
return 2147483647;
if(dividend==0)
return 0;
if(dividend==Integer.MIN_VALUE&&divisor==Integer.MIN_VALUE)
return 1;
int flag=0;
if(dividend>0&&divisor<0||dividend<0&&divisor>0)
{
flag=1;
}
long a=Math.abs((long)dividend);
long b=Math.abs((long)divisor);
long n=0;
while(a>=b)
{
long n1=1;
long b1=b;
while(a>=b1)
{
a=a-b1;
n=n+n1;
b1=b1<<1;
n1=n1<<1;
}
}
if(flag==1)
{
n=~n+1;
}
if(n>Integer.MAX_VALUE||n<Integer.MIN_VALUE)
return 2147483647;
return (int)n;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
System.out.println(divide(m,n));
}
}