解决进制问题的方法学习

例题一:从键盘获取一个正整数,如果把它转为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

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值