Nombre Password [ Regístrate ]

Diccionario numérico (OIE 5 - 2001) - Solución

 

Solución en C:

Por cada palabra que se lee, se incrementa el valor de la variable num según el número que se haya leído, exceptuando el caso de las palabras "hundred", "thousand" y "million". Para las dos últimas se multiplica el valor de num por 1.000 o 1.000.000, respectivamente, y se añade a una variable que almacena el número total.

Para la palabra "hundred" hay que operar de modo especial, ya que las otras dos sólo pueden aparecer una vez, mientras que "hundred" puede aparecer precediéndolas. Para ello cuando aparece esta palabra sólo se multiplica la variable num por 100, dejando el número total como estaba. Al final se multiplica el número por -1 si el número era negativo.

 

Solución en Pascal:

Cada número (línea) puede constar de hasta 3 partes: lo que va delante de "million", lo que va delante de "thousand" y lo que quede al final. Por esa razón, cada palabra que se va leyendo se transforma en su número correspondiente y se suma a la variable auxiliar(aux), excepto si:

- es 1.000 o 1.000.000, que en esos casos en vez de sumarse a la variable aux, se suma a num la variable aux multiplicada por ese numero(1.000 o 1.000.000).
- es 100, en cuyo caso se multiplica la variable aux por cien.

La lista de palabras esta ordenada en un array del 0..31, en el que los elementos del 0 al 20 son las palabras "zero", "one",...,"twenty", del 21 al 27 son las palabras de "thirty" a "ninety", el 28, 29 y 30 son 100, 1000, y 1.000.000 respectivamente y el 31 es "negative".

Por lo tanto, si en la comparación de cada palabra con ese diccionario el puntero se para antes del 20 la palabra es el valor del puntero, si se para entre 21 y 27 se multiplica las unidades de ese número por 10 y se suma 20, y del 28 al 31 se hace de una en una asignando el valor correspondiente cada vez.

Código

Código fuente en C

Código fuente en Pascal



© (2001-2008) ALGORITMIA.NET - Política de privacidad