俄式乘法
这篇博文我来介绍一下一个非主流算法 /斜眼笑 俄式乘法
- 思路:
假设x和y是两个正整数,计算xy,现在用n的输入作为实例规模的度量标准。
假设x是偶数,一个规模为原来一半的实例必须要对x/2进行处理,xy=x / 2 * 2y
假设n是奇数,只需要对公式进行简单调整,xy=(x-1)/ 2 * 2y
并且使用1y=y作为终止条件。
我们写下来一个例子就会发现:所有当前x的值是奇数时候,只需要相加对应的y值即可得到x*y的乘积。
例如:
5065
=25130=12260 (+130)
=6520=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;
}
运行结果如下;