關於兩個數相乘, 求其為多少進製

2021-08-07 03:58:39 字數 1383 閱讀 8011

今天和大家來說說,我前幾天碰到的一道公司的筆試題,這道題並不是我們所學的語言知識這一方面的,在筆試中碰到這種題的機率還是挺大的,若用普通的方法去算,不是不可以,結果就是乙個,卷子絕對是答不完的(大神們除外哈),題目是這樣的:

假設在n進製下,下面的等式成立,567*456=150216,n的值是();

a: 9

b: 10

c: 12

d: 18

解:

這道題目看起來很簡單,很多人第一眼就可以直接把b排除掉,然而更讓人頭疼的是還有3個,而且這3個還不是那麼一眼好看出來(當然,要是一眼看出來了,那出題的人豈不是個弱智?),此前也碰到過一些這樣的題目,有一些稍微一算就出來了,那些題的突破點就在於跟10進製一比較,若比十進位制還要小,那進製肯定是要大於10;反之,若比十進位制還大,那進製就肯定是小於10的,若選項中有符合條件的就可以選出來,但對於這道題,我剛所說的方法,貌似,不太管用,所以就要用一些正規做法,不能再耍那種小聰明

1.第一步:

兩位數的最後一位相乘,題目中則就是7*6=42;但是題目中最後一位卻不是2而是6,是因為它不是十進位制乘法,所以問題就轉變成了42%n==6,得出這個式子之後,就可以把十進位制排除了,但是9,12,18都可以使42%n==6,所以我們就要進行下一步。

2.第二步:

不管是多少進製的數,乙個數字都可以這樣來表示(例如123可以寫成1*n^2+2* n^2+3),同樣的道理,我們可以把這兩個數分開來寫567*456=(5*n^2+6*n^1+7)(4*n^2+5*n^1+6)=20*n^4+25*n^3+30*n^2+24*n^3+30*n^2+36*n^1+28*n^2+35*n^1+42=1*n^5+5*n^4+2*n^2+1*n^1+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;這也就認證了第一步,

3.第三步

因為前兩步我們還是沒有求出來n,所以我們只能繼續再求%n,對剛才的式子再進行一次求模,得到的結果是(71 +42/n)%n==1,再分別吧9,12,18代進去驗算一遍,結果只有18符合條件,所以答案就是18。如果當你讀到這裡突然卡住了,比如說:兩邊同時除n再模n後表示式怎麼會是這樣,我第一次也犯過這迷惑(當時想不應該是 (71+42/n)%n==(1+6/n)%n嗎),仔細想一想,前面算的42%n==6,那麼說n肯定是大於6的,所以6/n就為0,然後1模上誰都為1,所以式子就變成了結果那樣,(71+42/n)%n==1;

最後說幾句,當你懂得使用這種方法去解,以後碰到此類問題都將是來乙個殺乙個,即快速又準確。

兩個數相乘

兩個數相乘 option base 1 private sub command1 click dim m as string dim n as string m trim text1.text n trim text2.text dim number1 as byte dim number2 as ...

關於兩個數值交換

一般在初學一門程式語言的時候就會接觸到兩個數值交換的問題,這一點在以後的程式設計中會經常用到,比如一些排序的程式中或者是類似前面的計算最大公約數等等,因此數值交換是程式設計最基本也是最重要的,這裡陳述兩種方法 1.使用中間變數來暫時的儲存乙個變數的值,這一點很容易理解,也很容易實現,類似這樣 以下 ...

關於進製的兩個問題

進製轉換主要看個位與個位相乘。1 例如30 中在十進位制中有多少個0呢?5 120 隨後120 6 7 8 9都沒有零出現因為個位相乘沒有零。直到10!出現2個零。所以規律是尋找相乘等於5的因子數。有幾個5就有幾個零。所以20!5!有1個0 1 5 10!有2個0 2 5 15!有3個0 3 5 2...