makapin #2065(2007/08/11 01:57 GMT) [ Perl ] Rating0/0=0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use strict; use warnings; use bigint; use Test::Simple tests => 12; my %kanji_of = (1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六', 7 => '七', 8 => '八', 9 => '九' ); my @keta = ('千','百','十',''); my @big_keta = ('', '万','億','兆'); sub to_kanji{ my $num = shift; $num = '0'.$num until (length($num) % 4 == 0); my @list = grep {defined $_} ( $num =~ m/(\d{4})?(\d{4})?(\d{4})?(\d{4})$/ ); my $ret = append_man_oku_tyo( map {to_kanji_sub($_)} @list ); return $ret; } sub append_man_oku_tyo{ my @list = @_; my $i = 0; my $str = join ' ', grep {$_} reverse map {$_ . ($_? $big_keta[$i++]:($i++,'')) } reverse @list; return $str; } #4桁の数字を漢字に変換 sub to_kanji_sub{ my @num = split //, shift; return join '', map { $num[$_] ? ( $_ != 3 && $num[$_] == 1 ? '': $kanji_of{$num[$_]}).$keta[$_] :'' } 0..3; } #テストコード do_test(); sub do_test{ ok(to_kanji(1) eq '一',"1 ok"); ok(to_kanji(1234) eq '千二百三十四',"1234 ok"); ok(to_kanji(4321) eq '四千三百二十一', "4321 ok"); ok(to_kanji(100) eq '百', "100 ok"); ok(to_kanji(1000) eq '千', "1000 ok"); ok(to_kanji(1001) eq '千一', "1001 ok"); ok(to_kanji(1021) eq '千二十一', "1021 ok "); ok(to_kanji(12345) eq '一万 二千三百四十五', "12345 ok"); ok(to_kanji(10000) eq '一万' ,"10000 w"); ok(to_kanji(1_0000_0000_0000) eq '一兆', "1_0000_0000_0000 ok"); ok(to_kanji(1_2345_6789) eq '一億 二千三百四十五万 六千七百八十九', "1234567879 ok"); ok(to_kanji(1732050807568877) eq '千七百三十二兆 五百八億 七百五十六万 八千八百七十七', "1732050807568877 ok"); }
Rating0/0=0.00-0+
[ reply ]
makapin
#2065()
[
Perl
]
Rating0/0=0.00
Rating0/0=0.00-0+
[ reply ]