#!/usr/bin/perl -w use strict; use utf8; # /=====================================================================\ # # | Copyright (C) 2007 Ioan A. Sucan, | # # | This program converts numbers up to one million into Italian words | # # | Released under the GNU General Public License | # # |---------------------------------------------------------------------| # # | Ioan A. Sucan #_# | # # | http://ioan.sucan.info (o o) | # # \=========================================================ooo==U==ooo=/ # my %numbers = (0 => 'zero', 1 => 'uno', 2 => 'due', 3 => 'tre', 4 => 'quattro', 5 => 'cinque', 6 => 'sei', 7 => 'sette', 8 => 'otto', 9 => 'nove', 10 => 'dieci', 11 => 'undici', 12 => 'dodici', 13 => 'tredici', 14 => 'quattordici', 15 => 'quindici', 16 => 'sedici', 17 => 'diciassette', 18 => 'diciotto', 19 => 'diciannove'); my %tens = (2 => 'venti', 3 => 'trenta', 4 => 'quaranta', 5 => 'cinquanta', 6 => 'sessanta', 7 => 'settanta', 8 => 'ottanta', 9 => 'novanta'); use constant TEN => 10; use constant HUNDRED => 100; use constant THOUSAND => 1000; use constant MILLION => 1000000; use constant BILLION => 1000000000; sub convert { my ($nr) = @_; return $numbers{$nr} if $nr < 20; if ($nr < HUNDRED) { my $rest = $nr % TEN; my $ten = ($nr - $rest) / TEN; my $result = $tens{$ten}; chop($result) if ($rest == 1 || $rest == 8); $result .= ($rest > 0 ? $numbers{$rest} : ''); if ($rest == 3) { chop($result); $result .= 'รจ'; } return $result; } if ($nr < THOUSAND) { my $rest = $nr % HUNDRED; my $hundreds = ($nr - $rest) / HUNDRED; return ($hundreds == 1 ? '' : convert($hundreds)).'cento'.($rest > 0 ? convert($rest) : ''); } if ($nr < MILLION) { my $rest = $nr % THOUSAND; my $thousands = ($nr - $rest) / THOUSAND; return ($thousands == 1 ? 'mile' : convert($thousands).'mila'). ($rest > 0 ? convert($rest) : ''); } if ($nr < BILLION) { my $rest = $nr % MILLION; my $million = ($nr - $rest) / MILLION; return ($million == 1 ? 'un' : convert($million)).' milion'.($million == 1 ? 'e' : 'i'). ($rest > 0 ? ' '.convert($rest) : ''); } return 'un miliardo' if $nr == BILLION; 'infinito'; } my $nr = ; chomp($nr); binmode STDOUT, ":utf8"; print $nr < 0 ? 'minus '.convert(-$nr) : convert($nr), "\n";