大整数乘法问题

#include <iostream>
#include <memory>
using namespace std;

// 返回位数size1 + size2
int* multi(int *num1, int size1, int *num2, int size2) {
	int size = size1 + size2;
	int *ret = new int[size];
	int i    = 0;
	memset(ret, 0, sizeof(int) * size);
	for(i = 0; i < size2; ++i) {
		int k = i;
		for(int j = 0; j < size1; ++j) {
			ret[k++] += num2[i] * num1[j];
		}
	}

	for(i = 0; i < size; ++i) {
		if(ret[i] >= 10) {
			ret[i+1] += ret[i] / 10;
			ret[i]   %= 10;
		}
	}

	return ret;
}

int main() {
	int num1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1 };
	int num2[] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5 };
	int size1 = sizeof(num1) / sizeof(int);
	int size2 = sizeof(num2) / sizeof(int);

	cout << "size1: " << size1 << endl;
	cout << "size2: " << size2 << endl;

	int *ret = multi(num1, size1, num2, size2);

	for(int i = size1 + size2 - 1; i >= 0; i--) {
		cout << ret[i];
	}
	cout << endl;

	delete[] ret;

	return 0;
}
摘自左飞《CPP数据结构原理与经典问题求解》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值