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.