The challenge here is to write a string processing algorithm that doesn't use any python math function. A specification for the following program can be found here.
Python Program
while True:
indecimal_str = input('Enter (decimal) integer: ')
if indecimal_str == '':
raise SystemExit
indecimal = list(indecimal_str)
exbin = []
print(indecimal, '<->', exbin)
while True:
if len(indecimal) == 0:
print('Conversion', indecimal_str, '=', "".join(exbin))
print()
break
carry_state = False
g = indecimal[len(indecimal)-1]
if g in '02468':
exbin.insert(0, '0')
elif g in '13579':
exbin.insert(0, '1')
if g == '1': indecimal[len(indecimal)-1] = '0'
elif g == '3': indecimal[len(indecimal)-1] = '2'
elif g == '5': indecimal[len(indecimal)-1] = '4'
elif g == '7': indecimal[len(indecimal)-1] = '6'
else : indecimal[len(indecimal)-1] = '8'
else:
print('Input not valid')
raise SystemError
for i in range(0,len(indecimal)):
if carry_state == False:
if indecimal[i] in '13579':
carry_state = True
if indecimal[i] in '01':
indecimal[i] = '0'
elif indecimal[i] in '23':
indecimal[i] = '1'
elif indecimal[i] in '45':
indecimal[i] = '2'
elif indecimal[i] in '67':
indecimal[i] = '3'
elif indecimal[i] in '89':
indecimal[i] = '4'
else:
print('Input not valid')
raise SystemError
else: # carry_state == True
if indecimal[i] in '02468':
carry_state = False
if indecimal[i] in '01':
indecimal[i] = '5'
elif indecimal[i] in '23':
indecimal[i] = '6'
elif indecimal[i] in '45':
indecimal[i] = '7'
elif indecimal[i] in '67':
indecimal[i] = '8'
elif indecimal[i] in '89':
indecimal[i] = '9'
else:
print('Input not valid')
raise SystemError
if indecimal[0] == '0':
indecimal.pop(0)
print(indecimal, '<->', exbin)
OUTPUT
Enter (decimal) integer: 8
['8'] <-> []
['4'] <-> ['0']
['2'] <-> ['0', '0']
['1'] <-> ['0', '0', '0']
[] <-> ['1', '0', '0', '0']
Conversion 8 = 1000
Enter (decimal) integer: 37
['3', '7'] <-> []
['1', '8'] <-> ['1']
['9'] <-> ['0', '1']
['4'] <-> ['1', '0', '1']
['2'] <-> ['0', '1', '0', '1']
['1'] <-> ['0', '0', '1', '0', '1']
[] <-> ['1', '0', '0', '1', '0', '1']
Conversion 37 = 100101
Enter (decimal) integer: 409
['4', '0', '9'] <-> []
['2', '0', '4'] <-> ['1']
['1', '0', '2'] <-> ['0', '1']
['5', '1'] <-> ['0', '0', '1']
['2', '5'] <-> ['1', '0', '0', '1']
['1', '2'] <-> ['1', '1', '0', '0', '1']
['6'] <-> ['0', '1', '1', '0', '0', '1']
['3'] <-> ['0', '0', '1', '1', '0', '0', '1']
['1'] <-> ['1', '0', '0', '1', '1', '0', '0', '1']
[] <-> ['1', '1', '0', '0', '1', '1', '0', '0', '1']
Conversion 409 = 110011001