大数相乘(C语言,分治算法)

问题:
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。大数运算主要有加、减、乘三种方法。
下面就是用分治算法解决“大数相乘”问题。

分治算法解题的一般步骤:

  • 分解:将要解决的问题划分为若干个规模较小的同类问题
  • 求解:当子问题划分的足够小时,用较简单的方法解决
  • 合并:按原问题的要求,将子问题的解逐层合并构成原问题的解
    两个大数的例子
#include<iostream>
using namespace std;
#include<string.h>

#define MAXSIZE 1000

int *result; //定义全局整型数组,存放结果 

int Multipy(char*a,int ai,int aj,char*b,int bi,int bj,int move){
   
   
	if(aj-ai <=1 && bj-bi <= 1){
   
     //当子问题为两位数和两位数相乘或者更小时
		int t1,t2;
		t1 = a[ai] - 48;
		if(aj != ai)t1 = t1*10+(a[aj] - 48);
		t2 = b[bi] - 48;
		if(bj != bi)t2 = t2*10+(b[bj] - 48); 
		result[move] += t1*t2;
		return 1;
	}
	int m = (ai+aj)/
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值