例题一:从键盘获取一个正整数,如果把它转为16进制的数字,那么它是一个几位数呢?如果把它转为28进制 又是一个几位数呢?
思路:首先我们可以联想的十六进制,比十进制的数要大,只要求出十进制可以除几次16,就可以算出十进制转化十六进制有几位数
例如:48/16=3,3/16=0;一共除了2次 即 00000030
1932/16=120,120/16=7,7/16=0;一共除了3次 即 0000078C
故统计位数代码为
int main()
{
int n;
int count = 0;
scanf("%d" ,& n);
while (n != 0)
{
n /= 16;
count++;
}
printf("%d\n", n);
return 0;
}
例题二:假设在n进制下,下面的等式成立,567*456=150216,n的值是()。
A. 9 B. 10 C. 12 D.18
思路:先假设为n进制将左边表达出即
(5*n^2+6*n^1+7*n^0)*(4*n^2*5*n^1+6*n^1)=20*n^4+49*n^3+88*n^2+71*n+42
150216=n^5+5*n^4+n^3+2*n^2+n+6
1.取出最后没有n的数,对n取余42%n = 6%n
因为选项n都比6大,故对6取余为6 ,找42对选项哪一个取余为6
得出 A.9 C.12 D.18 都取余为6
2.找出 71*n+42 = n+6
同时除n,在进行取余得到:(71+42/n)%n= (1+6/n)%n
对于右边 因为n大于6,所以(1+6/n)还是小于n,(1+6/n)%n=1
即(71+42/n)%n= (1+6/n)%n=1
将剩下的选项A C D带入等于一即可
故选择D.18