本帖最后由 BZR 于 5-4-2025 13:05 编辑
搞点儿题?
话不多说,直接上题目(此题来自2001-02 ACSL Senior Division Contest #1 Short Problems No.1):
Solve for X_8:
BAD_16 = X_8 + 465_8 - 447_8
解:我们可以观察到方程左侧是一个十六进制数,右侧均是八进制数,先把十六进制数化成八进制数(我个人没啥好算法,间接转化):
先将 BAD(H) 转二进制:
第一位:B(=11)
11÷2=5......1
5÷2=2......1
2÷2=1......0
1÷2=0......1
-> B(H) = 1011(B)
第二位:A(=10)
10÷2=5......0
5÷2=2......1
2÷2=1......0
1÷2=0......1
-> A(H) = 1010(B)
第三位:D(=13)
13÷2=6......1
6÷2=3......0
3÷2=1......1
1÷2=0......1
-> D(H) = 1101(B)
连起来,所以 BAD(H) = 1011 1010 1101(B)。
接下来,再将得到的二进制数转为八进制:
101110101101(B)三位一组:101 110 101 101,每一组分别按权展开:
101(B) = 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5(O)
101(B) = 5(O)
110(B) = 1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 6(O)
101(B) = 5(O)
所以 101110101101(B) = 5655(O)
经过一番转换,我们可以得出方程的左边是八进制下的5655。现在,方程变为5655(O) = X(O) + 465(O) - 447(O)。 移项:X(O) = 5655(O) - 465(O) + 447(O)
接下来要处理的就是八进制下的加减。(当然,如果你不嫌麻烦,把它们全部转成十进制再进行加减也是可以的,转十进制的方法也可以用作验算。)非十进制的加减法与十进制类似,但进位和借位的原则是基于当前进制的基数。八进制加减就是逢8进1,借1加8。如果你口算不好,可以尝试列竖式,简单又直观。 先来化简 5655(O) - 465(O)好了。 5 6 5 5 - 4 6 5 ------------ 5 1 7 0 第1位:5 - 5 = 0 第2位:5 - 6,不够减,向第3位借位,八进制下借一位加8,(5 + 8) - 6 = 7 第3位:6被借了1,变成5,- 4 = 1 最后一位5直接拉下来,所以最终结果为5170(O)。
接下来求 5170(O) + 447(O) 5 1 7 0 + 4 4 7 -----1------ 5 6 3 7 第1位:0 + 7 = 7 第2位:7 + 4 = 11 > 8,进1,变成3 第3位:1 + 4 = 5,5 + 1 = 6 最后一位5拉下来,所以最终结果为5637(O)。
综上所述,X = 5637。原方程就解出来了!
再来一道?下题来自相同卷子的Short Problems No.2:
How many 1's are in the binary representation of the following hexadecimal sum? 59A_16 + B28D6_16 + E3E_16
就是问:下面十六进制算式的结果的二进制表达含有多少个1? 有两种大的解题思路: 1. 将题目中所有十六进制数转成二进制数,相加之后统计。 2. 先将十六进制数相加,再将结果转成二进制进行统计。 一般来说,第二种的效率会更高一些,原因是二进制数很长,相加容易晕...... 那么,就用第二种方法解: 十六进制相加(逢16进1): B 2 8 D 6 5 9 A + E 3 E -----1-1--1---- B 3 C A E 结果为 B3CAE(H)。
现在要将B3CAE(H)转二进制: 第一位:B(=11) 11÷2=5......1
5÷2=2......1
2÷2=1......0
1÷2=0......1
-> B(H) = 1011(B)
第二位:3 3÷2=1......1 1÷2=0......1 (补0)-> 3(H) = 0011(B) 第三位:C(=12) 12÷2=6......0 6÷2=3......0 3÷2=1......1 1÷2=0......1 -> C(H) = 1100(B) 第四位:A(=10) 10÷2=5......0 5÷2=2......1 2÷2=1......0 1÷2=0......1 -> A(H) = 1010(B) 第五位:E(=14) 14÷2=7......0 7÷2=3......1 3÷2=1......1 1÷2=0......1 -> E(H) = 1110(B)
拼起来,所以 B3CAE(H) = 1011 0011 1100 1010 1110(B) 最后数一数有多少个“1”,即可得到答案:12个。
|