vase 发表于 2010-5-19 13:40:42

我也手痒...
写个perl 的发出来ttk_12use strict;


my %point = (
    "万" => 5,
    "亿" => 9
);


my %base = (
    "千" => 4,
    "百" => 3,
    "十" => 2
);

my %num = (
    "零" => 0,
    "一" => 1,
    "二" => 2,
    "三" => 3,
    "四" => 4,
    "五" => 5,
    "六" => 6,
    "七" => 7,
    "八" => 8,
    "九" => 9
);
my $utf8CharBit = 3;

my @digits = ();
my $number = "三千七百八十四万六千一百二十五";


print getLessThanOneHundredMillionNumber("一万三千零四十五");

# 比一亿小
sub getLessThanOneHundredMillionNumber{
    my ($chineseNumber) = @_;
    my ($first, $second) = split "万", $chineseNumber;
    my @digits;
    my $firstDigits = getLessThanTenThousandNumber($first);
    push @digits, @$firstDigits;
    my $secondDigits = getLessThanTenThousandNumber($second);
    push @digits, @$secondDigits;

    return (sprintf "%d" x 8 . "\n", @digits) + 0;
}

# 比一千小
sub getLessThanTenThousandNumber{
    my ($chineseNumber) = @_;
    my @digits;
    my $thuIndex = index $chineseNumber, "千";
    my $hunIndex = index $chineseNumber, "百";
    my $tenIndex = index $chineseNumber, "十";

    push @digits, ($thuIndex > 0) ? $num{substr $chineseNumber, 0, $thuIndex} : 0;
    push @digits, ($hunIndex > 0) ? $num{substr $chineseNumber, $hunIndex - $utf8CharBit, $utf8CharBit} : 0;
    push @digits, ($tenIndex > 0) ? $num{substr $chineseNumber, $tenIndex - $utf8CharBit, $utf8CharBit} : 0;
    push @digits, $num{substr $chineseNumber, length ($chineseNumber) - $utf8CharBit};

    #printf "%d" x 4 . "\n", @digits;
    return \@digits;
}

killunix 发表于 2010-5-19 13:59:44

用sauron的那个就对了,写的既简单又好用

dgda 发表于 2010-5-19 15:58:37

原帖由 lzkd 于 2010-5-19 12:11 PM 发表 http://pkuxkx.com/forum/images/common/back.gif


你这个不是已经出来了吗?最后再差一点就是。
你把那个算式整成
sqian = tonumber(sqian1)*tonumber(sqian2) + tonumber(sqian3)*tonumber(sqian4) + ......

就可以了

我就是这个想法,可我不会弄

你提的sqian1一直到sqian...是怎么来的啊?

lzkd 发表于 2010-5-19 16:12:35

上面我写的,只能--->sqian="3*10000000+7*1000000+8*100000+4*10000+6*1000+1*100+2*10+5"

就是把你这个,拼出来的时候,加上那个函数,不就可以了?

lzkd 发表于 2010-5-19 16:13:24

看见n多人show,我也有点心痒了,等我回家也show一个。嘻。。。。看起来,很好玩的样子

zgbl 发表于 2010-5-19 16:14:20

我觉得用462都可以写得出来……

lzkd 发表于 2010-5-19 17:51:14

这个是从helllua里扒出来的.看大家都发,我也手痒,发一个玩玩
这个代码,不负责解答,看的明白就明白,看不明白就不明白

_nums={}
_nums["一"]=1
_nums["二"]=2
_nums["三"]=3
_nums["四"]=4
_nums["五"]=5
_nums["六"]=6
_nums["七"]=7
_nums["八"]=8
_nums["九"]=9

ctonum=function(str)
if (#str % 2) ==1 then
return 0
end
result=0
wan=1
unit=1
for i=#str -2 ,0,-2 do
char=string.sub(str,i+1,i+2)
if (char=="十") then
   unit=10*wan
   if (i==0) then
    result=result+unit
   elseif _nums==nil then
    result=result+unit
   end
elseif (char=="百") then
   unit=100*wan
elseif (char=="千") then
   unit=1000*wan
elseif (char=="万") then
   unit=10000*wan
   wan=10000
else
   if _nums~=nil then
    result=result+_nums*unit
   end
end
end
return result
end
itemnumre=rex.new("(((零|一|二|三|四|五|六|七|八|九|十|百|千|万)*)(位|支|颗|个|把|只|粒|张|枚|件|柄|根|块|文|两|碗|滴)){0,1}(.*)")

dgda 发表于 2010-5-19 18:05:42

lzkd这个狠啊,呵呵,看不是太懂,慢慢看了

lzkd 发表于 2010-5-19 18:16:50

原帖由 dgda 于 2010-5-19 06:05 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
lzkd这个狠啊,呵呵,看不是太懂,慢慢看了

主要是我自己也不懂,呵呵,见笑了.
不过,算法这个东西,我还没本事说清楚,偶是文科生来的

dgda 发表于 2010-5-19 19:14:18

论坛里搜索到了mapper以前弄的lua的代码了

太强了,搞了半天,我做了个无用功,呵呵

mapper的代码可用,可我怎么把算出来的数字传回mush用呢?
页: 1 [2]
查看完整版本: mush新手求助