- 论坛徽章:
- 6
|
u
本帖最后由 RE_HASH 于 2016-07-22 05:37 编辑
尽力了,不保证没有漏的:
use utf8;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
sub CheckNumber
{
my $N = $_[0];
return "Failed (Decimal)" if (exists $N->{'.'} && $N->{'.'} =~ /\D/);
delete $N->{'.'};
return "Failed (Missing 零)" if (exists $N->{万} && exists $N->{个} && $N->{个} !~ /^(\d千|0)/);
return "Failed (Missing 零)" if (exists $N->{亿} && exists $N->{万} && $N->{万} !~ /^(\d千|0)/);
return "Failed (Missing 零)" if (exists $N->{亿} && ! exists $N->{万} && exists $N->{个} && $N->{个} !~ /^(\d千|0)/);
foreach (keys %$N)
{
return "Failed (Unit $_)" unless ($N->{$_} =~ /^(\d千)?(\d百|0)?(\d十|0)?\d?$|^十\d$/);
}
return "Passed";
}
while(<DATA>){
chomp;
print;
my $P;
tr/一二三四五六七八九零点/1234567890./;
s/^百分之//;
s:(\d+)分之(\d+):($2/$1):e;
s/又0\././;
#printf "=$_";
s/(\.(.+))/$P->{'.'} = $2; ''/eg;
s/$/个/;
s/(.+?)([万亿个])/$P->{$2} = $1; ''/eg;
printf "\t%s\n", CheckNumber$P;
}
__DATA__
五十九万三千一百
二百零四万
一千零五十万零四十
七千万五千
二亿二千万
十三亿一千万
四十九点五八十
四十九点五八
六又七分之一
百分之九十四点五
四十五三万三千一百七十百五点六八
四十五万三千一百七十百五点六八
三亿万
三万万
三万十
三万二十 |
|