几类经典例题的分析

1.关于计算进制的问题。

假设在n进制下,15*4=112,n的值为()

A .6    B.7    C. 8        D.10

分析:像这个数值小的选择题情况下,大多数选择去代入选项再进行进制运算得出正解。 在此,介绍一种方法:

先按n进制展开得 : (n+5)*4=1*n^2+n+2

                              4n+20 =n^2+n+2   //两边对n取余

                             20%n=2%n  

                           20%n=2   //这里有2,所以排除是2进制,所以余数仍然为2;

 即可得到答案6,总结:像十进制12*12=144,积的个位与两个乘数的各位有关 :2*2=4,类似,其他进制的积的各位于乘数的个位有关,即可利用个位和求模得出结果,例如上题4*5%n=2,得出结果为6

   将 难度加大:假设在n进制下,567*456=150216,n的值为()

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

分析:利用积的个位的乘积对n取余得到各位:,但是此题ACD三个选项仍然符合题意,即只能用增加一个常数项的方法进行二次判断。

按照n进制展开:20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6   (1)

                         6*7%n=6                                                                                (2)

   两边除以n,再对n取余   71%n+42/n%n=1%n+6/n%n=1   //除以n是为了构造一个新的常数项,进行2次判断。

                                      (71+42/n)%n=1                                                   (3)

结合123式即可得到结果18。

 

2.宏的相关问题。

有如下代码: 

#define  M(x,y,z) x*y+z;

void main()

{

int a=1.,b=2,c=3;

printf("%d\n",M(a+b,b+c,c+a);

}输出结果为多少?

错解:(a+b)*(b+c)*(c+a)=19

正解:a+b*b+c*c+a=12

分析:宏定义是什么就怎么使用宏,不需要改动自以为运算,此处无需加括号,宏仅仅就是字符替换。

                        

 

你可能感兴趣的:(经典例题)