俄式乘法
俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设m和n是两个正整数,我们要计算它们的积。它的主要原理如下:
当n为偶数时:
n * m=n/2 * 2m
当n为奇数时:
n * m=(n-1)/2 * 2m + m
并以1*m=m作为结束条件。
n*m步骤如下:
n m
------------------------------------------
50 65
25 130 130
12 260
6 520
3 1040 1040
1 2080
------------------------------------------
sum=130+1040+2080=3205
——————————————————————————————————
#include <iostream>
using namespace std;
int Mul(int n, int m)
{
int sum=0, a=0;
if(n==0 || m==0)
return 0;
if(n==1)
return m;
while(n!=1)
{
if(n%2==0)
{
//n=n/2;
n>>=1; //注意:右移一位表示减半,深刻理解:移位运算;
//m*=2;
m<<=1;
}
else
{
//n=n/2;
n>>=1;
a+=m;
//m*=2;
m<<=1;
}
}
sum=a+m;
return sum;
}
void main()
{
int m, n; //两个相乘的数
int sum = 0;
cout<<"请输入两个相乘的正整数:"<<endl;
cin>>m>>n;
sum=Mul(n, m);
cout<<"乘积是:"<<sum<<endl;
}
//运行结果
//请输入两个相乘的正整数:
//50 65
//乘积是:3250