算法导论 · 分治法 · 大整数乘法

  • 算法说明
    对于大整数乘法,是将一个数,在数位上直接分成两半,分开计算,按照公式,加法直接计算,遇到乘法时,递归调用自己。公式如下图:
    在这里插入图片描述
  • 源代码
#include <cstdio>
#include <cmath>

int multiplye(int a, int b, int n) { //大整数乘法 
	if(n == 1) return a * b;
	int mid = n / 2;
	int temp = (int)pow((double)10, (double)mid);
	int a1 = a / temp, a0 = a % temp; //将数据按照数位分成两半
	int b1 = b / temp, b0 = b % temp;
	
	int c2 = multiplye(a1, b1, mid), c0 = multiplye(a0, b0, mid);
	int c1 = multiplye(a1 + a0, b1 + b0, mid) - (c2 + c0);
	return c2 * pow((double)10, (double)n) + c1 * temp + c0;
}

int main() {
	int a = 1234, b = 5678, n = 4;
	printf("%d", multiplye(a, b, n));
	return 0;
}

2.3.3 运行结果
在这里插入图片描述

发布了77 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/97428270