设计算法实现大整数乘法,利用分治的思想编写算法,利用c++语言实现算法, 给出程序的正确运行结果。

1、设计算法实现大整数乘法,利用分治的思想编写算法,利用c++语言实现算法,给出程序的正确运行结果。(注意输入两个相同位数!!)

#include 
using namespace std;
#include 


int get_length(long x);//判断整数的长度
int sign(long a);//判断数字的正负
long big_mulitip(long x, long y, int n);//输入两个大整数,计算两个整数的和

int main()
{
	long u,v;
	int i;
	cout << "大整数乘法:请输入相同位数两个大整数:\n u = ";
    cin >> u;
    cout << " v = ";
    cin >> v;

	cout << "整两个大整数的位数是:\n";
	cout << get_length(u) << endl;

	i = get_length(u);
	cout << "两个大整数的乘积是:\n";
	cout << big_mulitip(u, v, i) << endl;

		
	return 0;
}
//判断长度
int get_length(long x)
{
	int leng=0;
	while(x)
	{
		x/=10;
		leng++;
	}
	return leng;
}
// 判断符号

int sign(long a)
{
	return a >0 ? 1:-1;//正则表达式判断为真输出1,假则输出-1
}

//进行乘法运算,返回值
long big_mulitip(long x, long y, int n)
{
    // a-b和d-c可能为负值
    int s = sign(x) * sign(y);
    x = abs(x);
    y = abs(y);
    
    if (x == 0 || y == 0)
        return 0;
    else if (n == 1)
        return s * x * y;
    else
    {
        long a = (long)(x / pow(2, n / 2));
        long b = (x % (long)pow(2, n / 2));
        long c = (long)(y / pow(2, n / 2));
        long d = (y % (long)pow(2, n / 2));

        long E = big_mulitip(a, c, n / 2);             // E=a*c
        long F = big_mulitip(b, d, n / 2);             // F=b*d
        long G = big_mulitip((a - b), (d - c), n / 2) + E + F; // G=(a-b)*(d-c)+bd+ac

        return (long)(s * (E * pow(2, n) + G * pow(2, n / 2) + F));
    }
}

运行结果:
设计算法实现大整数乘法,利用分治的思想编写算法,利用c++语言实现算法, 给出程序的正确运行结果。_第1张图片

你可能感兴趣的:(算法分析实验报告)