我有诸如5 2 113221101000101
的输入(“ 5”是五进制,而“ 2”是二进制)我有number
五进制和二进制,但是它们的连接没有空格(“ 113221101000101”)。 / p>
所以我的问题是如何通过number
(数字为5 2 113221101000101
)找到确切的837
我添加一些示例:
5 2 113221101000101
这个数字是837
13 7 1016
这个数字是13
4 12 2222248A
这个数字是682
A
至F
代表数字10
至15
答案 0 :(得分:1)
您应该意识到,您可以从右到左或从左到右解码字符串。算法不同,但简单明了。
您可以使用第一个基数从左开始解码字符串,而使用其他基数从右开始解码字符串。
始终根据值较小的字符解码(解码的字符从右开始或从左开始)。 如果两个值相等,则为较小的底数再解码一位。
当两种解码都使用了字符串的所有字符时,它们应该产生的值相同,即结果。
示例:
5 2 113221101000101 the number is 837
1-------------1
1 base 5 1 base 2 1=1 -> decode base 2
1------------01
1 base 5 1 base 2 1=1 -> decode base 2
1-----------101
1 base 5 5 base 2 1<5 -> decode base 5
11----------101
6 base 5 5 base 2 6>5 -> decode base 2
11---------0101
6 base 5 5 base 2 6>5 -> decode base 2
11---------0101
6 base 5 5 base 2 6>5 -> decode base 2
11--------00101
6 base 5 5 base 2 6>5 -> decode base 2
11-------000101
6 base 5 5 base 2 6>5 -> decode base 2
11------1000101
6 base 5 69 base 2 6<69 -> decode base 5
113-----1000101
33 base 5 69 base 2 33<69 -> decode base 5
1132----1000101
167 base 5 69 base 2 167>69 -> decode base 2
1132---01000101
167 base 5 69 base 2 167>69 -> decode base 2
1132--101000101
167 base 5 325 base 2 167<325 -> decode base 5
11322-101000101
837 base 5 325 base 2 837>325 -> decode base 2
113221101000101
837 base 5 837 base 2 finished
答案 1 :(得分:0)
您可以通过“蛮力”进行工作,即从两个给定的基础执行所有转换,并进行所有可能的拆分,并在相等时停止(除非有几种解决方案)。
事实上,您可以通过以下方式以相对有效的方式做到这一点
从基数A到从左到右转换整个字符串,并保留所有中间结果;
再次从基数B左右转换,并与互补的基数A解码进行比较。
请注意,两种表示形式中的数字位数都可以估算,因为它们与底数的对数成反比。稍加小心,就可以预测一个单位内的位数,这会稍微缩短转换工作量。
例如,第一个数字得出的长度估计值为4.52和10.48,这暗示分解为5/10。