算法简介:
俄罗斯农夫法的乘法算法,整数与整数相乘的方法如下:
代码如下:
import java.util.Scanner;
public class Algorithm_1 {
/**
* 实现俄罗斯农夫法的乘法算法
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m, n, flag,res;
while (true) {
m = sc.nextInt();
n = sc.nextInt();
flag = 0;res=0;
if (m < 0) {
m = 0 - m;
flag = 1;
}
if (n < 0) {
n = 0 - n;
flag = 1 - flag;
}
while (m >= 1) {
if ((m & 1) == 1) {// odd
res+=n;
m=(m-1)>>1;
n=n<<1;
}
else{
m=m>>1;
n=n<<1;
}
}
if(0 == flag){
System.out.println("m × n = "+res);
}else{
System.out.println("m × n = -"+res);
}
}
}
}
/*
* 测试数据:
* 输入:0 0 输出:0
* 输入:13 18 输出:234
* 输入:-13 18 输出:-234
* 输入:13 -18

本文介绍了俄罗斯农夫法的乘法算法,通过位运算避免使用复杂的乘除运算符。算法首先判断输入整数的正负,利用flag标记。接着,通过循环处理奇数和偶数情况,不断调整m和n的值,直至m变为1。最后,结合正负标志得到结果。该算法的时间复杂度为O(1)。
最低0.47元/天 解锁文章
5244

被折叠的 条评论
为什么被折叠?



