找回密码
 加入
搜索
楼主: henry10423

[效率算法] 字串问题 求解

 火.. [复制链接]
发表于 2013-3-3 16:26:12 | 显示全部楼层
回复 15# afan
我知道了
发表于 2013-3-3 16:41:52 | 显示全部楼层
不整了,算0的话没法算了,中间的4的整数个数0不算的话,可以有6个0
10000001
发表于 2013-3-3 16:53:34 | 显示全部楼层
不整了,算0的话没法算了,中间的4的整数个数0不算的话,可以有6个0
10000001
netegg 发表于 2013-3-3 16:41



    这不就是“一千万零一”
发表于 2013-3-3 17:16:20 | 显示全部楼层
回复 18# afan
是啊,但是情况貌似多了点
发表于 2013-3-3 22:26:00 | 显示全部楼层
研究研究。。。。
发表于 2013-3-4 04:32:31 | 显示全部楼层
本帖最后由 netegg 于 2013-3-4 04:48 编辑

[au3]#include <WinAPIEx.au3>
#include <array.au3>
$tFormat = _WinAPI_CreateNumberFormatInfo(0, 0, 4, '', ' ', 0)
$num = _WinAPI_GetNumberFormat(0, '15700970090560901', $tFormat)
$aNum = StringSplit($num, ' ', 2)
Local $aDigit[5] = ['', '万', '亿', '兆', '京']
Local $aDec[10] = ['0', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
$ret = ''
For $i = 0 To UBound($aNum) - 1
        Switch StringLen($aNum[$i])
                Case 4
                        $ret &= StringFormat('%s仟%s佰%s拾%s', $aDec[Number(StringLeft($aNum[$i], 1))], $aDec[Number(StringMid($aNum[$i], 2, 1))], $aDec[Number(StringMid($aNum[$i], 3, 1))], $aDec[Number(StringRight($aNum[$i], 1))]) & $aDigit[UBound($aNum) - 1- $i]
                Case 3
                        $ret &= StringFormat('%s佰%s拾%s', $aDec[Number(StringLeft($aNum[$i], 1))], $aDec[Number(StringMid($aNum[$i], 2, 1))], $aDec[Number(StringRight($aNum[$i], 1))]) & $aDigit[UBound($aNum) - 1-$i]
                Case 2
                        $ret &= StringFormat('%s拾%s', $aDec[Number(StringLeft($aNum[$i], 1))], $aDec[Number(StringRight($aNum[$i], 1))]) & $aDigit[UBound($aNum) - 1-$i]
                Case 1
                        $ret &= StringFormat('%s', $aNum[$i]) & $aDigit[UBound($aNum) - 1-$i]
        EndSwitch
Next
$ret = StringRegExpReplace($ret, '0[仟|佰|拾]', '0')
$ret = StringRegExpReplace($ret, '0{1,}', '零')
$ret = StringReplace($ret, '零兆', '兆')
$ret = StringReplace($ret, '零亿', '亿')
$ret = StringReplace($ret, '零万', '万')
$ret = StringReplace($ret, '零京', '京')
MsgBox(0, 0, $ret)[/au3]还有点问题
发表于 2013-3-4 07:09:40 | 显示全部楼层
本帖最后由 netegg 于 2013-3-4 11:53 编辑

再简单些吧!!
[au3]$num = '15700970090560901'
$aNum = StringRegExp(StringFormat('%0' & Ceiling(StringLen($num) / 4) * 4 & 's', $num), '\d{4}', 3)
Local $aDigit[5] = ['', '万', '亿', '兆', '京']
Local $aDec[10] = ['0', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
$ret = ''
For $i = 0 To UBound($aNum) - 1
        $ret &= StringFormat('%s仟%s佰%s拾%s', $aDec[Number(StringLeft($aNum[$i], 1))], $aDec[Number(StringMid($aNum[$i], 2, 1))], $aDec[Number(StringMid($aNum[$i], 3, 1))], $aDec[Number(StringRight($aNum[$i], 1))]) & $aDigit[UBound($aNum) - 1 - $i]
Next
$ret = StringReplace(StringReplace(StringReplace(StringReplace(StringRegExpReplace(StringRegExpReplace($ret, '0[仟|佰|拾]', '0'), '0{1,}', '零'), '零兆', '兆'), '零亿', '亿'), '零万', '万'), '零京', '京')
MsgBox(0, 0, stringtrimright(stringtrimleft($ret,BitAND(StringInStr(StringLeft($ret, 1), '零'),1)), BitAND(StringInStr(Stringright($ret, 1), '零'),1)))
[/au3]开头结尾两个零不知道怎么搞了,只好凑了一下,先放着了
afan那个数如下,用上面的代码做的,楼主的那几个数如图1
基本无位数限制,只要有对应单位名称就行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-3-4 15:40:45 | 显示全部楼层
可以搞到77位数
把Local $aDigit[5] = 这行改成
Local $aDigit[19] = ['', '万', '亿', '兆', '京', '垓', '杼','穰','沟','涧','正','载','极','恒河沙', '阿僧只','那由他','不可思议','无量','大数']懒得继续往下添了,估计这么大的数够用了
计数单位见http://wenwen.soso.com/z/q165938584.htm
发表于 2013-3-5 12:34:47 | 显示全部楼层
本帖最后由 netegg 于 2013-3-5 19:54 编辑

第九行改成
[au3]$ret = StringRegExpReplace(StringRegExpReplace($ret, '零[仟|佰|拾]', '零'), '零(?=[京|兆|亿|万])|^零|零$|零{2,}', '')
msgbox(0,0,$ret)[/au3]
发表于 2013-3-6 09:20:36 | 显示全部楼层
学习下!!!!!!!!!!!!!!
发表于 2017-9-5 00:32:06 | 显示全部楼层
留個腳印 macgyver  不錯的資料
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 08:33 , Processed in 0.096242 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表