这种关于进制的C语言题目,到底如何解答?

来源:互联网 发布:苏州网络推广 编辑:程序博客网 时间:2024/05/20 20:05

这是一个关于进制的C语言题目,当你弄懂了这道题,类似的题目都将学会如何解答。

题目:
假设在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) = n^5+5*n^2+2*n^2+n+6
将左边式子乘开再合并同类项得:
20*n^4+49*n^3+88*n^2+71*n+42 = n^5+5*n^2+2*n^2+n+6

此时只要找到能解出满足等式两边的n即为答案,
但要将题中的所有数字一个一个代入太过麻烦,
于是需要先化简一下这个式子。

等式两边同时对n取余(%n)得到:42%n = 6%n
因为6对任何大于6的数取余都等于6,所以得:42%n = 6

现在我们得到了第一个可以求出n的简单式子,
但是将题目中的数字代入后只能排除选项B.10,
于是还要进行下一步化简。

等式两边除以n再对n取余得到:(71+42/n)%n = (1+6/n)%n
同理只要n大于6,等式就为:(71+42/n)%n = 1

那么通过这第二个化简后的式子就能很容易得出:n = 18

这道题解完了,你是否也学会了其中的小窍门。
那么以后遇到类似关于进制的题目也都不在话下。

谢谢你访问我的博客文章。

原创粉丝点击