description俄式乘法:又被称为俄国农夫法,其实就是两个数相乘,变相的算法。
思路:假设偶两个数n,m
description俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设m和n是两个正整数,我们要计算它们的积。它的主要原理如下:
①if n%2 等于1,则总数加m,否则m加倍,n折半向上取整
②重复①至n等于1,得到的总数就是两个数的乘积。
该算法只包括折半,加倍,相加等几个简单操作,因此实现速度非常快。具体代码如下(c++):
#include <iostream>
#include <math.h>
using namespace std;
int multi(int n,int m){
int sum=0;
while(n>1){
if(n%2==1)
sum+=m;
m=m*2;
n=ceil(n/2);
cout<<n<<" "<<m<<endl;
}
sum+=m;
return sum;
}
void main(){
int n,m;
cout<<"请输入两个数:" ;
cin>>n;
cin>>m;
cout<<n<<","<<m<<"的相乘为"<<multi(n,m)<<endl;
}
验证:
请输入两个数:12 4
6 8
3 16
1 31
12,4的乘积为48.