`

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

 
阅读更多
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;
	}
	
}

2
0
分享到:
评论

相关推荐

    Verilog实现一个32位有符号除法器和一个32位无符号除法器

    在Verilog中,可以使用操作符如`/`和`%`来进行除法和取余运算,但这些操作符在硬件层面并不直接对应,因此需要自定义硬件逻辑来实现。 接着,我们转向32位无符号除法器(DIVU)。无符号除法器处理的数仅包含正数和...

    第5节-操作符详解.pdf

    其中,除法操作符(/)的行为取决于操作数的类型,如果两个操作数都是整数,执行整数除法,结果也保留为整数。一旦涉及浮点数,则执行浮点数除法。取模操作符(%)仅适用于整数类型,其结果是两个整数相除后的余数。 ...

    C++ 分数与整数的混合运算 操作符重载

    在这个场景中,我们关注的是如何通过操作符重载来实现分数与整数的混合运算,包括正负数的处理。下面将详细探讨这个主题。 首先,我们需要创建一个分数类(Fraction)来存储分数数据。这个类通常包含两个私有成员...

    算术表达式C算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/,用#表示结束。

    算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/,用#表示结束。 算法输出:表达式运算结果。

    java基础编程题

    ### Java基础编程题知识点解析 #### 一、斐波那契数列 **知识点:** - **递归算法**:通过函数自身调用的方式解决。 - **循环算法**:使用循环结构来避免递归带来的性能问题。 **描述:**编写程序生成斐波那契数列...

    Java经典编程题(附答案)

    这道题是分解质因数,需要找到所有能整除给定正整数n的质数,直到n变为1。质因数是质数且能整除n的数。可以采用试除法,从2开始逐个尝试。 【程序5】 该程序使用了条件运算符,如(a&gt;b)?a:b,根据条件a是否大于b,...

    非常经典的JAVA编程题全集(50题及答案)

    程序1中使用了循环,通过维护两个变量`f1`和`f2`来保存当前数列的前两个元素,每次迭代更新这两个变量,计算下一个数。 - 知识点:循环结构(for循环),变量的动态更新,数学序列的实现。 2. **素数判断**(程序2...

    第5-6次课(有理数的乘法、除法、乘方运算).pdf

    例如,在编程语言中,乘方运算通常通过`**`操作符实现,如在Python中,`a ** b`表示a的b次方。 总结一下,有理数的乘法、除法和乘方运算是基础数学的一部分,对于理解和应用IT技术至关重要。无论是在编写算法、解析...

    Java自学总结94点

    - 除数为零时,整数除法会产生`ArithmeticException`,而浮点数除法则会产生`NaN`或`Infinity`。 14. **`strictfp`修饰符**: - `strictfp`修饰符保证浮点运算结果的一致性,特别是在多线程环境中。 - 使用此修饰...

    面向对象原理与Java实践课程实验-对象和类

    - 操作符重载(虽然Java不支持直接的操作符重载,可以通过方法的命名来模拟这种效果)。 #### 实验总结 通过这三个实验,学生可以全面地学习和练习面向对象编程的基本概念和技术。不仅能够掌握类和对象的基本定义...

    JAVA 50习题

    - **实现**: 遍历101到200之间的每个数,使用试除法来判断是否为素数(即除了1和自身外,不能被其他任何数整除)。 #### 3. 水仙花数 - **知识点**: 水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如...

    C语言编程题精选.pdf

    - 使用除法和取余操作计算每种面额的数量 - 输出结果时注意格式化,确保清晰易读 ### 4. 数组操作与统计 - **知识点**: - 数组的初始化 - 随机数生成 - 循环结构 - 统计计算 - **技术要点**: - 使用`rand...

    最新Java编程面试题全集(共50道题+答案).docx

    它使用两个嵌套循环,外层循环遍历每个数,内层循环检查当前数是否能被小于或等于其平方根的任何数整除。如果不能被整除,那么这个数就是素数。这种方法提高了效率,因为任何大于其平方根的因子都会有一个对应的因子...

    java疑难解惑(提高篇)

    位操作符在这种情况下更快,因为它直接检查最低位是否为1,而不需要进行除法运算。 接下来是“找零时刻”的谜题。在计算找零时,使用`double`类型可能会导致精度问题。由于二进制浮点数无法精确表示某些十进制数,...

    2014c语言必做题

    - 描述:从键盘输入两个正整数`a`和`b`,计算并输出`a/b`的商和余数。 - 关键知识点: - 输入输出操作:`scanf`用于接收用户输入,`printf`用于输出结果。 - 运算符:除法`/`和取模`%`运算符的应用。 - 数据...

    Python除法之传统除法、Floor除法及真除法实例详解

    在Python编程语言中,除法运算有三种不同的形式:传统除法、Floor除法(也称为截断除法)和真除法。这些除法运算符在Python 2和Python 3中有所不同,但Python 3是当前主要使用的版本,所以我们主要关注Python 3的...

    数据结构的算术表达式求值

    在这个问题中,我们关注的是正整数操作数,四种基本运算符(加、减、乘、除),以及括号作为分隔符。表达式的起始和结束符是“#”,这使得表达式的边界清晰。 算术表达式求值的常见方法之一是算符优先法,也称为...

    JAVA实现计算器课程设计解读.docx

    - 加法测试:验证两个正数、两个负数以及正负数相加的结果。 - 减法测试:测试减法操作,包括负数减负数、正数减负数等。 - 乘法测试:检查乘法运算的正确性,包括整数和小数的乘法。 - 除法测试:确保除法运算在非...

    理工大程序设计编程答案

    - **整数运算**:C语言支持基本的数学运算操作符,如加法`+`、减法`-`、乘法`*`、除法`/`和取模`%`。例如: ```c int a = 10, b = 3; int c = a + b; // 加法 int d = a - b; // 减法 int e = a * b; // 乘法 ...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

Global site tag (gtag.js) - Google Analytics