除数
来源:互联网 发布:微软软件认证考试 编辑:程序博客网 时间:2024/04/29 18:22
两个数字相除 不能用 除号等
/** * @Title: temp.java * @Package * @Description: TODO * @author nutc * @date 2013-9-7 下午1:42:09 * @version V1.0 */public class temp {public static void main(String asrgs[]){temp t = new temp();System.out.println(t.divide(-2147483648, 2));} public int divide(int dividend1, int divisor1) { //考虑1)正负号 2)溢出--long处理 记得在math.abs里就要long 不然 int 里的MIN_VALUE会溢出的! if(divisor1 ==0) return -1; //除数为0的时候应该怎么处理? if(divisor1 == 1) return dividend1; if(dividend1 == 0) return 0; boolean ifn = false; if(dividend1<0 && divisor1>0 || dividend1>0&&divisor1<0){ ifn = true; dividend1 = -dividend1; } long dividend = Math.abs((long)dividend1); //最重要的环节!!最大的会造成溢出!! 因为正数比负数少一个啊啊啊啊 long divisor = Math .abs((long)divisor1); int i = 1,j=1; while(i*divisor>0 && i*divisor<dividend ){ j = i; i+=i; }// System.out.println("i="+i+" "+i*divisor); int temp = j; while(i*divisor<0 || i*divisor<dividend){// if(i*divisor>dividend) break; if(i*divisor<0) i -= temp; temp >>=1; i += temp; } while(j<=i){ int mid = j+((i-j)>>1); //左右移动的优先级 低于 常见操作符!!// System.out.println(j+" "+mid+" "+i); if(mid*divisor==dividend|| mid*divisor<dividend && (mid+1)*divisor>dividend){ if(!ifn) return mid; else return -mid; } else if(mid*divisor>dividend){ i = mid-1; }else{ j = mid+1; } } return 0; }}
别人写的比较值得参考
/* * Divide two integers without using multiplication, division and mod operator. */public int divide(int dividend, int divisor) { if (divisor == 0) throw new IllegalArgumentException("divisor cannot be 0"); if (dividend == 0) return 0; boolean neg = (dividend > 0 != divisor > 0); long dend = dividend; long dsor = divisor; dend = Math.abs(dend); dsor = Math.abs(dsor); if (dsor == 1) return neg ? new Long(-dend).intValue() : new Long(dend).intValue()); if (dend == dsor) return neg ? -1 : 1; int quotient = 0; while (dend >= dsor){ long tmp = dsor; int result = 1; while (dend >= (tmp + tmp)){ tmp <= 1; result <= 1; } quotient += result; dend -= tmp; } return neg ? -quotient : quotient;}
http://gist.github.com/bittib/5734695
- 除数
- 避免零做除数
- sql 除数为0
- 0做除数时
- 谨防除数为零
- 累进可除数
- 0做除数
- php除数取整
- 使用除数时有小数点
- oracle 除数为 0
- Java中除数0
- 两个count获取除数
- oracle 除数不能为0
- 为什么零不能做除数
- 有关除数的一些性质
- 九位累进可除数
- ios 除数为0时
- sql语句除数为零
- 浏览器服务器交互过程
- POJ 1979 - Red and Black(深搜)
- C++内存检测
- 我打算写博客了
- 读字符串越界
- 除数
- POJ 3009 - Curling 2.0(深搜)
- nbu学习笔记一
- 博弈论习题分析
- pcDuino安装vnc进行远程控制-[转载]
- 系列:鸭子-策略模式(Strategy)
- hdu2110-Crisis of HDU
- VS2008 + Opencv2.1 读取图片像素输出至Excel文件
- 大数相加,相减,相除,相乘。。。java BigInteger BigDecimal