1. 程式人生 > >判斷一個計算是以多少進位制進行的

判斷一個計算是以多少進位制進行的

         我們經常會遇到這麼一個問題,例如,假設在n進位制下,4*6=33,求n是多少?很多人一看,這不簡單嘛,4*6=24,24/3=7...3,就是7進位制嘛。

         這種方法是可以,但是如果數字太大的情況下呢?我們得進行多麼大的計算量才能算下來?所以今天我來和大家分享一個與此類似的阿里巴巴的面試題。

         假設在n進位制下,下列等式是成立的567*456=150216,n的值是( )

       A、9                   B、10                    C 、12                      D  、18          

         顯然這個題不能通過上面的簡單辦法來計算,那我們應該怎麼辦呢? 

         我們可以先把上面的大數字化簡一下,把它拆開 寫成(5*n^2+6*n+7)*(4*n^2+5*n+6)=1*n^5+5*n^4+2*n^2+n+6

->20*n^4+49*n^3+88*n^2+71*n+42=n^5+5*n^4+2*n^2+n+6

        首先第一步,我們用等式的兩邊都對n取餘,則等式就變為 42%n=6%n。本來在題目簡單的情況下,只通過這一步便可以確定算式的進位制數,但是像阿里巴巴這種變態公司出的題,你會發現A、42%9=6%9,

B、42%12=6%12,C、42%18=6%18貌似都可以,我們只能將B排除,不過沒關係,我們還有第二步。

        第二步,我們用等式的兩邊除以n後,再對n取餘。那麼等式就變成了(71+42/n) %n=(1+6/n)%n 。再通過這個式子將A ,C ,D,帶入其中進行檢測 。

     A、左邊(71+42/9)%9=3    ,右邊(1+6/9)%9=1

     C、左邊(71+42/12)%9=2    ,右邊(1+6/9)%9=1

     D、左邊

(71+42/18)%9=1   ,右邊(1+6/9)%9=1

      所以答案就選D。通過這個方法,我們就可以解決這一類求進位制數的問題。