【问题描述】
俄式乘法(Russian multiplication)用来计算两个正整数n和m的乘积,运算规则是:
如果n是偶数,计算n/2×2m;
如果n是奇数,计算(n-1)/2×2m+m;
当n等于1时,返回m的值。
据说19世纪的俄国农夫使用该算法并因此得名,这个算法也使得乘法的硬件实现速度非常快,因为只使用移位就可以完成二进制数的折半和加倍。
【算法代码】
#include <bits/stdc++.h>
using namespace std;
int RussMul(int n,int m){
if(n==1) return m;
if((n&1)==0) return RussMul(n>>1,m<<1);
else return RussMul((n-1)>>1,m<<1)+m;
}
int main() {
int n,m;
cin>>n>>m;
cout<<RussMul(n,m)<<endl;
return 0;
}
/*
in: 2 6
out: 12
*/