算法分析實驗之俄式乘法


題目描述

俄式乘法,又被稱為俄國農夫法,它是對兩個正整數相乘的非主流算法。假設m和n是兩個正整數,我們要計算它們的積。它的主要原理如下: if n is 偶數 n m=n/2 2m else n * m=(n-1)/2 + m 該算法只包括折半,加倍,相加等幾個簡單操作,因此實現速度非常快。具體計算如下圖所示:

 

 

輸入

兩個正整數 n,m。

輸出

n和m的乘積。
輸出整個求和表達式,運算符與數字之間用一個空格隔開。

樣例輸入復制

50  65

樣例輸出

130 + 1040 + 2080 = 3250


樣例分析:
50 65
25 130 左邊數為奇數
12 260
6 520
3 1040   左邊數為奇數
1 2080   左邊數為奇數

把左邊數為奇數的右邊的數全部加起來:130+1040+2080=3250

#include<iostream>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int temp[1005];
    int k=0;
    while(n!=0)
    {    

        if(n%2==1){
            temp[k]=m;
            k++;
        }
        
        n/=2;
        m*=2;
    }
    int sum=0;
    for(int i=0;i<k;i++)
    {
        sum+=temp[i];
        cout<<temp[i];
        if(i==k-1) cout<<" "<<"="<<" "<<sum<<endl;
        else cout<<" "<<"+"<<" ";
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM