问题:
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。大数运算主要有加、减、乘三种方法。
下面就是用分治算法解决“大数相乘”问题。
分治算法解题的一般步骤:
- 分解:将要解决的问题划分为若干个规模较小的同类问题
- 求解:当子问题划分的足够小时,用较简单的方法解决
- 合并:按原问题的要求,将子问题的解逐层合并构成原问题的解
#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)/