当前位置:首页 > 开发 > 编程语言 > Java > 正文

java-编程实现两个正整数的除法,当然不能用除法操作符

发表于: 2012-03-25   作者:bylijinnan   来源:转载   浏览次数:
摘要: public class MyDiv { /** * 题目:编程实现两个正整数的除法,当然不能用除法操作符。 * 方法1:除数不断乘以2,直到最接近被除数 * 方法2:二分查找 * 扩展题目:如何求出a%b的值,要求不能使用除法和求模运算! * 解答:在上面求出商(假设为c)之后,a%b=a-(b*c); */ private static
public class MyDiv {

	/**
	 * 题目:编程实现两个正整数的除法,当然不能用除法操作符。
	 * 方法1:除数不断乘以2,直到最接近被除数
	 * 方法2:二分查找
	 * 扩展题目:如何求出a%b的值,要求不能使用除法和求模运算!
	 * 解答:在上面求出商(假设为c)之后,a%b=a-(b*c);
	 */
	
	private static boolean INVALID_INPUT;
	
	public static void main(String[] args) {
		
		int x=24;
		for(int y=1;y<=x;y++){
			System.out.printf("%d/%d=%d%n", x,y,div01(x,y));
			System.out.printf("%d/%d=%d%n", x,y,div02(x,y));
		}
	}
	
	// return x/y. Let y*2*2*2...to be close to x.
	public static int div01(int x, int y) {
		if (!(x > 0 && y > 0 && x >= y)) {
			INVALID_INPUT = true;
			return -1;
		}
		int result = 0;
		while (x >= y) {
			int f = 1;
			/*
			 * may overflow,change it to (y*f)<=(x/2) 
			 while (y * f * 2 <= x) {
			 	f = f * 2; 
			 }
			 */
			while (y * f <= (x >> 1)) {
				f = f * 2;
			}
			result += f;
			x -= f * y;
		}
		return result;
	}
	
	// return x/y. Like binarySearch
	public static int div02(int x, int y) {
		if (!(x > 0 && y > 0 && x >= y)) {
			INVALID_INPUT = true;
			return -1;
		}
		int low=1;
		int high=x;
		int mid=0;
		int rest=x;
		do{
			mid=(low&high)+(low^high)/2;//low+(high-low)/2
			rest=x-y*mid;
			if(rest<0){
				high=mid-1;
			}
			if(rest>=y){
				low=mid+1;
			}
		}while(!(rest>=0&&rest<y));
		return mid;
	}
	
}

java-编程实现两个正整数的除法,当然不能用除法操作符

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
题目:不使用乘法,除法,和取余运算计算两个int型的除法 思路:既然不让用乘法,除法,只能回归小
Imports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object,
Imports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object,
引子   在我之前的一篇文章[ ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)
垃圾回收器之标记擦除法 这一次我们来简单的了解一下标记擦除法(mark-and-sweep),标记擦除法是第一
想必一般玩过暴雪游戏的人,都会对暴雪游戏的平衡性赞不绝口。若是对其游戏数值有进一步研究的人,
垃圾回收器之标记擦除法 这一次我们来简单的了解一下标记擦除法(mark-and-sweep),标记擦除法是第一
Gauss 消去法是解线性方程组的一种直接方法,有时也称为精确法,这种算法只包含有限四次运算,并且
1.回顾一下变量 1)变量在它第一次赋值时创建 2)变量在表达式中使用将被替换为它们的值 3)变量在
数据库考试中经常会出现关系运算题目 而一般的加减乘运算相对比较简单,通常不会直接出题 比较容易
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号