Search code examples
numberslanguage-agnostic

Converting words to numbers


I have problem converting words into numbers like

Input:

Five Thousand Six Hundred Thirty two

Output:

5632

How can I do this?


Solution

  • Here, i did it in python, it will help you or someone else from algorithmic perspective.

    #!/usr/bin/python
    
    __author__ = 'tomcat'
    
    all = {
            "one" : 1,
            "two" : 2,
            "three" : 3,
            "four" : 4,
            "five" : 5,
            "six" : 6,
            "seven" : 7,
            "eight" : 8,
            "nine" : 9,
            "ten" : 10,
            "eleven": 11,
            "twelve": 12,
            "thirteen": 13,
            "fourteen": 14,
            "fifteen": 15,
            "sixteen": 16,
            "seventeen": 17,
            "eighteen": 18,
            "nineteen": 19,
            "twenty" : 20,
            "thirty" : 30,
            "forty" : 40,
            "fifty" : 50,
            "sixty" : 60,
            "seventy" : 70,
            "eighty" : 80,
            "ninety" : 90,
            "hundred" : 100,
            "thousand" : 1000,
            "million" : 1000000,
            "billion" : 1000000000,
            "trillion" : 1000000000000,
            "quadrillion" : 1000000000000000,
            "quintillion" : 1000000000000000000,
            "sextillion" : 1000000000000000000000,
            "septillion" : 1000000000000000000000000,
            "octillion" : 1000000000000000000000000000,
            "nonillion" : 1000000000000000000000000000000
            };
    
    
    spliter = {
            "thousand" : 1000,
            "million" : 1000000,
            "billion" : 1000000000,
            "trillion" : 1000000000000,
            "quadrillion" : 1000000000000000,
            "quintillion" : 1000000000000000000,
            "sextillion" : 1000000000000000000000,
            "septillion" : 1000000000000000000000000,
            "octillion" : 1000000000000000000000000000,
            "nonillion" : 1000000000000000000000000000000
            };
    
    inputnumber = raw_input("Please enter string number : ");
    
    tokens = inputnumber.split(" ");
    
    result = 0;
    partial_result = 0;
    for index in range(len(tokens)):
        if tokens[index] in spliter :
            if partial_result == 0:
                partial_result = 1;
            partial_result *= all[tokens[index]];
            result += partial_result;
            partial_result = 0;
        else:
            if tokens[index] == "hundred" :
                if partial_result == 0:
                    partial_result = 1;
                partial_result *= all[tokens[index]];
    
            else:
                partial_result += all[tokens[index]];
    
    
    result += partial_result;
    
    print result;