举例:1234*5678
X=1234 Y=56789 n=4
A=(int)1234/(10)^(4/2)=12
B=1234-12*10^(4/2)=34
C=(int)5678/(10)^(4/2)=56
D=5678-56*10^(4/2)=78
int SIGN(A) { //判断该数是否为正数
return (A > 0) ? 1 : -1;
}
int divideConquer(int X, int Y, int n){//大数X,Y位数n
int sign = SIGN(X) * SIGN(Y);
int x = abs(X);
int y = abs(Y);
if(x == 0 || y == 0){//相乘为0直接返回0
return 0;
}else if(n == 1){//1位数直接求积
return sign*x * y;
}else{
int A = (int) x / pow(10, (int)(n / 2)); //获取前n/2位
int B = x - A * pow(10, n / 2);//获取后n/2位
int C = (int) y / pow(10, (int)(n / 2));
int D = y - C * pow(10, n / 2);
int AC = divideConquer(A, C, n / 2);//继续分
int BD = divideConquer(B, D, n / 2);
int ABDC = divideConquer((A - B), (D - C), n / 2) + AC + BD;
return sign * (AC * pow(10 , n) + ABDC * pow(10, (int)(n / 2)) + BD);
}
}