2012-09-09 50 views
0

我正在研究一個程序,該程序允許我將二進制數相乘/相加/相加。在我的程序中,我將所有整數都表示爲數字矢量。乘以二進制給出的兩個整數

我已經設法弄清楚如何做到這一點,但是,乘法讓我迷迷糊糊,我想知道是否有人可以給我一些關於如何獲得僞代碼作爲這個程序的指導的建議。

在此先感謝!編輯:我試圖找出如何創建乘法算法仍然清除了事情。將不勝感激任何有關如何計算這種算法的幫助。我通常不會使用C++,因此花費更多的時間來解決它。

+0

你能夠分/二進制數字? – cprogcr

+3

回想一下你在小學時如何學習如何用十進制數字來手工乘法和長分。你可以使用二進制相同的原則。首先嚐試用鉛筆和紙張,以確保您瞭解算法,然後對其進行編碼。 –

回答

2

長乘法在僞代碼看起來是這樣的:

vector<digit> x; 
vector<digit> y; 

total = 0; 
multiplier = 1; 
for i = x->last -> x->first //start off with the least significant digit of x 
    total = total + i * y * multiplier 
    multiplier *= 10; 

return total 
+0

嗯..你能描述一下你的意思嗎?x-> last - > x-> first? – Valrok

+0

@Julian從'x'的最後一位開始,一直工作到第一位。因此,對於數字「156」,您可以從「i = 6」開始,然後是5,然後是1. –

0

剛試過的東西,而這將如果只用二進制數的無符號值進行乘法運算:

unsigned int multiply(unsigned int left, unsigned int right) 
{ 
    unsigned long long result = 0; //64 bit result 

    unsigned int R = right; //32 bit right input 
    unsigned int M = left; //32 bit left input 

    while (R > 0) 
    { 
     if (R & 1) 
     {// if Least significant bit exists 
      result += M; //add by shifted left 
     } 
     R >>= 1; 
     M <<= 1; //next bit 
    } 

/*-- if you want to check for multiplication overflow: -- 
    if ((result >> 32) != 0) 
    {//if has more than 32 bits 
     return -1; //multiplication overflow 
    }*/ 

    return (unsigned int)result; 
} 

然而,這是在它的二進制級別...我只是你有數字向量作爲輸入