一元数通常只表示非负整数,但是我们可以如下扩展它们以表示所有整数:
- 正整数N表示为N
1
:5 -> 11111
- 负整数-N表示为
0
N,后跟N1
:-5 -> 011111
- 零表示为
0
如果使用0
分隔符,则可以明确表示这些数字的列表:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
您的任务:获取一个表示这样的带符号的一进制数字列表的字符串,并将其转换为十进制数字列表。
细节
您可以假定输入是带符号的一进制数字的完整列表。特别是,您的程序将不必处理1)空输入或2)以分隔符结尾的输入。
您可以假设每个数字的大小不超过127。对于具有最大字符串或列表大小的语言,可以假设输入和输出将适合您语言的数据结构,但是从理论上讲,算法应适用于以下列表任何大小。
你的程序或功能可以执行的I / O任何标准的方法。输入可以是字符串或字符列表,单字符字符串,整数或布尔值。您可以使用任何两个字符来表示1
和0
; 如果您不使用1
和0
,请指定您正在使用的字符。
输出必须是任何合理列表格式的十进制数字(尤其是数字之间必须有某种分隔符)。负数应以减号表示,尽管如果您的语言对负整数使用不同的格式,我也会接受。零可以在输出中表示为0
或-0
。
测试用例
1 -> 1
0 -> 0 (or -0, and similarly for the other test cases)
011 -> -2
1101 -> 2,1
1100 -> 2,0
11001 -> 2,-1
110001 -> 2,0,1
11100110001 -> 3,-2,0,1
00000001 -> 0,0,0,-1
01111011111111001111111111111110111111111111111100111111111111111111111110111111111111111111111111111111111111111111 -> -4,8,-15,16,-23,42
01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 -> -127
0
)和负号前缀(0
)是相同的,尽管它仍然是明确的,因为您不能在数字中间使用负号(是182--693-1
数字吗?也不是1111011000101111
出于完全相同的原因)。
'0's
,因此从技术上讲它不是一元的。好挑战!