俄式乘法

俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设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

posted on 2011-06-30 15:48  carekee  阅读(3167)  评论(0编辑  收藏  举报