关于两个数相乘, 求其为多少进制

来源:互联网 发布:淘宝嘉年华英伦休闲鞋 编辑:程序博客网 时间:2024/05/22 09:38
    今天和大家来说说,我前几天碰到的一道公司的笔试题,这道题并不是我们所学的语言知识这一方面的,在笔试中碰到这种题的几率还是挺大的,若用普通的方法去算,不是不可以,结果就是一个,卷子绝对是答不完的(大神们除外哈),题目是这样的:    假设在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;

最后说几句,当你懂得使用这种方法去解,以后碰到此类问题都将是来一个杀一个,即快速又准确。