您的位置:首页 > 编程语言 > C语言/C++

关于进制

2017-11-22 23:12 46 查看
阿里曾经的一个笔试题:

在n进制下,567*456=150216成立,n的值是()

A.9

B.10

C.12

D.18

这个题如果拆开一项一项的算,肯定是可以,但是太浪费时间了。看最后一位数的话,6*7=42,42对9取余是6,42对12取余是6,42对18取余是6,42对10取余是2,所以可以排除掉B.但是还有三个选项。我们可以左右拆开的看。

左边 =(5*n^2+6*n+7)*(4*n^2+5*n+6)=20*n^4+49*n^3+88*n^2+71*n+42

右边=n^5+5*n^4+2*n^2+n^1+6

左边=右边

即20*n^4+49*n^3+88*n^2+71*n+42 = n^5+5*n^4+2*n^2+n^1+6;

1.两边同时对n取余,一定相等。

所以42对n取余一定等于6对n取余,n一定是比6大的数,因为乘数出现了6和7,所以6对n取余结果一定是6,那么42对n取余结果也一定是6,也就是上面所说的排除了B选项。

2.两边先除以n再对n取余,一定也是相等的。

所以(71+42/n)%n=(1+6/n)%n,然后把选项带进去试一下

A.9    (71+4)%9=3, (1+0)%9=1, 排除

C.12  (71+3)%12=2, (1+0)%12=1, 排除

D.18  (71+2)%18=1, (1+0)%18=1, 正确

所以本题答案是D

这样的方式更节约时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔试题 c语言 进制