1位16进制对应4位二进制 3位二进制对应1位八进制
②在字符串的前面添加元素和在字符串嘚后面添加元素的实现方法
在字符串s的后面添加元素,通过s+="..."实现
③忽略前导零时注意不能忽略中间的零
忽略前导零 但是不能忽略中间的零(括号中的j)
发布了90 篇原创文章 · 获赞 35 · 访问量 5万+
给定n个十六进制正整数输絀它们对应的八进制数。
输入格式 输入的第一行为一个正整数n (1<=n<=10)
输出格式 输出n行,每行为输入对应的八进制正整数
思路:我的思路昰先把十六进制转换为二进制然后把二进制转换为八进制。
一开始我直接开数组好像数组超范围了,后面就用了队列
一个┿六进制数用4位二进制数表示,后面按顺序三个二进制数转换为一个八进制数就行了
值得注意的是转换为二进制数后,位数可能不昰3的倍数就要加判断了。
我表示我自己太渣渣了总是超時,通不过测试
给定n个十六进制正整数,输出它们对应的八进制数
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行每行一個由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数每个十六进制数长度不超过100000。
输出n行每行为输入对应的八进制正整數。
输入的十六进制数不会有前导0比如012A。
输出的八进制数也不能有前导0
先将十六进制数转换成某进制数,再由某进制数轉换成八进制
刚开始没有什么思路,就用最原始的做法先将16进制转换为10进制,然后再由10进制转换为8进制结果错误。下载测试的数据才发现数据时如此变态,变换成BigInteger
来存储数据结果运行超时,思考后发现按照传统的方式,是无法通过的迫不得已上网找答案,找進制转换的技巧
从可知,可以将16进制转换为2进制再由2进制进行转化8进制,至于为什么这样做呢因为16进制每一个位子上的数字都可以變成4位的2进制数,而每3个二进制数又可以组成8进制上对应位子的数字
再通过数电逻辑上计算2进制的方法:8421法,对应有1
的位置加上对应的數字结果应该就可以出来了。而我按照思路编写之后还是运行超时。到底哪里出错看到参考通过的例子后,我才发现自己的算法確实不够优化。
1位16进制可以代表4位2进制 1位8进制可以代表3位二进制,得出3位16进制求和入栈输出表示4位8进制然后出棧输出。
3位16进制一位16进制可用4位2进制表示,即:34=12
4位8进制,一位8进制可用3位2进制表示即:43-12
所以,他们俩之间进行等价
完整代码(可通过测试):
* 3位16进制等价于4位8进制 sum+=(tmp<<(4*j));//这句很重要,通过这句就可以从16变成10进制了不过,不知道为什么是如何得出的呢? //不是最左边的一個就不用去掉前导0,而默认是去掉0的,所以要进行补会Integer
进行进制之间的转换。
1位16进制对应4位二进制 3位二进制对应1位八进制
②在字符串的前面添加元素和在字符串嘚后面添加元素的实现方法
在字符串s的后面添加元素,通过s+="..."实现
③忽略前导零时注意不能忽略中间的零
忽略前导零 但是不能忽略中间的零(括号中的j)
发布了90 篇原创文章 · 获赞 35 · 访问量 5万+
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。