【俄式乘法】

俄式乘法


这篇博文我来介绍一下一个非主流算法 /斜眼笑 俄式乘法

  • 思路:
    假设x和y是两个正整数,计算xy,现在用n的输入作为实例规模的度量标准。
    假设x是偶数,一个规模为原来一半的实例必须要对x/2进行处理,x
    y=x / 2 * 2y
    假设n是奇数,只需要对公式进行简单调整,xy=(x-1)/ 2 * 2y
    并且使用1
    y=y作为终止条件。

我们写下来一个例子就会发现:所有当前x的值是奇数时候,只需要相加对应的y值即可得到x*y的乘积。

例如:
5065
=25
130=12260 (+130)
=6
520=31040=12080
=2080+1040+130
=3250

  • 代码演示:
#include <iostream>
using namespace std;

int russian(int x, int y)
{
	if (x == 1)
		return y;
	if (x % 2 == 0)
	{
		return russian(x / 2, 2 * y);
	}
	else
	{
		return russian((x - 1) / 2, 2 * y) + y;
	}
}

int main()
{
	
	int x, y;
	cout << "请输入需要相乘的数:" << endl;
	cin >> x >> y;
	int sum = russian(x, y);
	cout << "乘积为: " << sum << endl;
	return 0;
}

运行结果如下;

猜你喜欢

转载自blog.csdn.net/qq_41879343/article/details/89647840