告诉你们一个大秘密:位值原理是编程里最常用的数学知识之一!几乎每年的 CSP 信息学奥赛入门级,都会考到进制转换的题目,而所有进制转换的核心,就是我们今天学的 “位值原理”。

下面这道题,就是 CSP-J 入门级第一题的难度,专门为今天的内容设计的,快来挑战一下吧!
题目:十二进制乘法口诀
题目描述如果人类有 12 根手指,我们就会使用十二进制计数。十二进制用 0-9 和 A、B 这 12 个符号表示数字,其中 A 代表十进制的 10,B 代表十进制的 11。
在十二进制中,乘法口诀会背到 “BB”(也就是 11×11)。现在请你写一个程序,输入两个十二进制的一位数,输出它们乘积的十二进制表示。
输入格式一行,两个字符,用空格隔开,分别是两个十二进制的一位数(0-9、A、B,保证是大写字母)。
输出格式一行,乘积的十二进制表示(10 用 A 表示,11 用 B 表示)。
输入样例
2 3输出样例
6解题思路(核心就是今天学的位值原理!看另一篇文章)
不管什么进制,位值原理都是一样的:只是基数从 10 变成了 12 第一步:把输入的两个十二进制字符,转换成十进制的整数 第二步:计算两个十进制整数的乘积 第三步:把乘积再转换回十二进制,输出结果 #include<iostream>usingnamespacestd;intmain(){char c1, c2;cin >> c1 >> c2;// 把字符转换成十进制数字(核心:字符的ASCII码运算)int a, b;if (c1 >= '0' && c1 <= '9') a = c1 - '0';else a = 10 + (c1 - 'A'); // 'A'对应10,'B'对应11if (c2 >= '0' && c2 <= '9') b = c2 - '0';else b = 10 + (c2 - 'A');// 计算乘积int product = a * b;// 把乘积转换成十二进制并输出if (product >= 12) {int shi = product / 12; // 十二进制的十位(位值:12^1)int ge = product % 12; // 十二进制的个位(位值:12^0)// 输出十位if (shi < 10) cout << shi;elsecout << (char)('A' + shi - 10);// 输出个位if (ge < 10) cout << ge;elsecout << (char)('A' + ge - 10); } else {// 乘积小于12,直接输出个位if (product < 10) cout << product;elsecout << (char)('A' + product - 10); }cout << endl;return0;}这道题的核心逻辑,和我们把十进制数拆成 “几个十加几个一” 是完全一样的。只要你真正理解了位值原理,不管是八进制、十六进制还是六十进制,转换方法都是相通的。 

文章来源:
四季读书网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至23467321@qq.com举报,一经查实,本站将立刻删除;如已特别标注为本站原创文章的,转载时请以链接形式注明文章出处,谢谢!