如何从字符串中找到小数和二进制?

时间:2018-09-08 11:46:37

标签: algorithm

我有诸如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

AF代表数字1015

2 个答案:

答案 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。