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

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

#include <iostream>
using namespace std;
#include <math.h>


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));
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值