怎麼理解十進位制轉二進位制輾轉相除演算法?

時間 2021-06-09 11:13:00

1樓:

225=1×2+1×2+1×2+0×2+0×2+0×2+0×2+1×2對吧。

225÷2的餘數不就是2前面的1嗎?

112÷2的餘數不就是2前面的0嗎?

56÷2的餘數不就是2前面的0嗎?

28÷2的餘數不就是2前面的0嗎?

14÷2的餘數不就是2前面的0嗎?

7÷2的餘數不就是2前面的1嗎?

3÷2的餘數不就是2前面的1嗎?

1÷2的餘數不就是2前面的1嗎?

2樓:心之所向

其實本質就是除以進製得到低位,減去低位,再除以進製得到高位。

模擬一下十進位制就OK了:

29如何用輾轉相除法確定它每個數字上的數字呢?

29 / 10 = 2 ……9

20 / 10 = 0…… 2

實際上可以這麼來理解:

29 = 2 * 10 + 9 * 10

那麼個位上的數字就是用29 % 10 = 9算出來的,十位上的數字就是由[(29-9) % 10] % 10 = 2 算出來的。因為進製是10,

那麼現在轉到2進製,我把二進位制的數字叫做2位、2位、2位……

29 = 1 * 2 + 0 * 2 + 1 * 2 + 1 * 2 + 1 * 2∧4

現在要確定2位上的數字:29 % 2 = 1

確定2位上的數字:[(29 - 1* 2) % 2] % 2 = 0

確定2位上的數字:%2= 1

總之就是除以進製運算後減去低位,之後繼續相除得到高位,直到被除數被除盡,因為低位已經確定了數字位置,不再繼續參與運算了,所以減去,每次相除得到的餘數就是每個數字上應得的數字。

輾轉相除法的思想和上述過程差不多,除以進製,得出低位,減去低位,繼續除以進製得到高位,只不過運算更為方便簡潔,每一步餘數都是計算得出的數字上的數字,還省下了減去低位的運算過程,不得不說發明這個演算法的人的確很厲害。

那麼輾轉相除法怎麼做到減去低位的呢?首先是餘數,然後是每一步除法,這裡大家都知道13÷3 =4……1。13= 3*4 + 1

餘數1*3就是從10裡面減去的部分。如果它再進行第二步除法並得到餘數,

4÷3 =1……1 減去的部分就是 1 *3。

可以驗證一下:1*3*3 + 1*3 + 1* 3=13

在29轉二進位制這個例子裡,第一次餘數為 1,代表從29中減去了 1 * 2,第二次餘數為0,代表減去了 0 * 2,第三次餘數為1代表了減去了 1 * 2……這樣就做到了減去低位,實在是妙啊。

3樓:匿名用屍

不如先考慮十進位制的問題

1.假設你有乙個十進位制數字串X(十進位制字串格式),把它放在黑箱裡,你看不見它存的是什麼。但你只可以對它做三件事,(1)把它最右端去掉 (2)獲得它最右端的值 (3)判斷X的是不是零。

那你要如何知道X的值。

很簡單,假設var X : String = "987"(假設你看不到),(2)->(1)->(3)迴圈做3次,你會得到a0 ='7', a1=' 8', a2='9'。答案是把a2, a1和a0拼接在一起。

2.那假設你有乙個數字X (不是字串),把它放在黑箱裡,你不知道它是什麼進製,也不知道它值是多少。也許我們可以用第一題的方法,但這個數字X不是字串,我們無法直接做上面那3種操作。

換言之,如果我們可以找到與之等價的3種操作,我們就能知道X的值。

根據小學常識,我們會知道 1234 除以 10 等於 123 餘 4 (除以10可以分割個位數字)。也就是說這3種等價操作是 (1)把X除以10的值取代X (不管餘數),(2)獲得X除10的餘數,(3)判斷X是不是零。

假設var X : Int = ??? 。同樣作(2)->(1)->(3)迴圈,同時記錄操作(2)得到的值,直到X等於0。

現在我要反過來問題主了,如果我把操作(2)得到的值(a0, a1, ... , aN)反過來拼接在一起,我會得到什麼進製的值? 為什麼?

數字X是什麼進製對問題有影響嗎?為什麼答主要把X放進黑箱裡?

如果我要獲得二進位制的值,那3種等價操作是什麼? (Hints: 把X想像成二進位制字串)

如果我要N進值的值,3種等價操作是什麼? (Hints: 10在十進位制下等於(10), 2在二進位制下等於(10),N在N進製下等於(10))

如何定義拼接操作?

二進位制 八進位制 十進位制 十六進製制 怎麼學會?是怎麼算的方式?

訬禕 這個是前段時間發現的很有意思的進製轉換 看整數部分運算,本來十進位制轉二進位制整數轉換規則 除以基數二 取餘,最後商為0 但我發現這個解題過程,商數為1,結束轉換這種類似的錯誤普遍存在,但好在通過反向求和可以驗算轉換是否存在錯誤,我個人覺得驗算還是可以讓自己少一些錯誤。 我也是現在才真正想清楚...

十進位制轉二進位制為什麼不是除以2?

火皇煌 對於10進製數,從左到右每位的數字代表的單位是 10的0次方 10的一次方 10的二次方 10的三次方。對於2進製,從左到右每位的數字代表的單位是 2的0次方 2的一次方 2的二次方 2的三次方。所以對於乙個十進位制數比如150而言,轉換成二進位制數X 如果先計算最高位,則就是先用150除以...

為什麼十進位制可以表示所有小數,二進位制三進製不能?

這個問題是錯的。無論是十進位制還是二進位制三進製,都沒法表示所有小數 題主指的應該是有理小數 其實,二進位制 三進製的階數太小,迴圈節變得比較長而已,有限的位數不容易表示出來而已。 Wolfie Wang 先問是不是,再問為什麼。如果只談有限小數,那麼十進位制和其他進製都有不能精確表示的數。如果把無...