/*************************************************************
* 此程式 採用分治法進行乘法運算
* 求 1011*1101
* coder: 九天神龍
* 運行結果:
* H:/Java/演算法/大整數~1>javac mult.java
*
* H:/Java/演算法/大整數~1>java mult
* 11x13 結果為: 143
*
* H:/Java/演算法/大整數~1>
**************************************************************/
import java.lang.*;
class mult{
public int x,y; //本題要求積的兩個數
//初始化本題中要求的兩個數
mult(){
x=11; //二進位的 1011
y=13; //二進位的 1101
}
//**************************************************
// 函數名 getvalue,此函數為本演算法的主函數
// 反回值為指定數xy的積
// 根據公式 XY=A*C*2n+((A-B)(D-C)+AC+BD)*2n/2+BD
// 共有3次乘法,6次加法,2次移位
//**************************************************
public int getvalue(int a,int b,int c,int d){
int n=4; //所求數的位元
return (a*c*(2<<(n-1))+
((a-b)*(d-c)+a*c+b*d)*
(2<<(n/2-1))+
b*d);
}
public static void main(String[] args){
int n=2;
mult mu=new mult();
int a,b,c,d;
//將原乘數分解
a=mu.x>>n;
b=mu.x&3;
c=mu.y>>n;
d=mu.y&3;
int ret=mu.getvalue(a,b,c,d);
//output result
System.out.println(""+mu.x+"x"+mu.y+" 結果為: "+ret);
}
}