马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 aeo 于 2014-1-22 16:58 编辑
只支持0到千亿的整数

- ;;;参数可以是数字或字符,大整数请用字符
- (defun chinese-num(j / k kkkk r s shu sz x y qian)
- (defun qian(shu / k s x y)
- (setq shu(vl-string->list shu)
- shu(mapcar 'chr shu)
- )
- (setq shu(mapcar '(lambda(x y)
- (setq k(atoi x))
- (if (= k 0) "零"
- (strcat (nth k sz) y)
- )
- ) shu kkkk
- ))
- (setq shu(mapcar '(lambda(x)(if(= x "一十")"十"x))shu))
- (while(= (car shu) "零")(setq shu (cdr shu))) ;前0
- (setq shu(reverse shu))
- (while(= (car shu) "零")(setq shu (cdr shu))) ;后0
- (setq shu(reverse shu))
- (setq s 0)
- (setq shu(vl-remove-if '(lambda(x) ;中间 多0
- (if(= x "零")(setq s(1+ s))(setq s 0))(> s 1))
- shu)
- )
- (apply 'strcat shu)
- )
- (if(numberp j)(setq j(itoa j)))
- (setq kkkk '("千""百" "十"""))
- (setq sz '("零""一""二""三""四""五""六""七""八""九"))
- (setq shu (strcat "000000000000" j ))
- (while(> (strlen shu)12)(setq shu(substr shu 2)))
- (if(= j "0") "零"
- (apply 'strcat
- (mapcar '(lambda(x y)(if(/= "" x)(strcat x y)""))
- (list(qian (substr shu 1 4))
- (qian (substr shu 5 4))
- (qian (substr shu 9 4))
- )
- '("亿""万""")
- )
- )
- )
- )
命令: (chinese-num "234567")
"二十三万四千五百六十七"
命令: (chinese-num 78903)
"七万八千九百零三"
=======================================
还不对 ,我再改改 {:soso_e145:}{:soso_e146:}
====================================================
下面的对了

- ;;参数可以是数字或字符,大整数请用字符
- (defun chinese-num(j / k kkkk r s q shu sz x y qian)
- (defun qian(shu / k s x y)
- (setq kkkk '("千""百" "十"""))
- (setq sz '("零""一""二""三""四""五""六""七""八""九"))
- (setq shu(vl-string->list shu)
- shu(mapcar 'chr shu)
- )
- (setq shu(mapcar '(lambda(x y)
- (setq k(atoi x))
- (if (= k 0) "零"
- (strcat (nth k sz) y)
- )
- ) shu kkkk
- ))
- (setq shu(mapcar '(lambda(x)(if(= x "一十")"十"x))shu))
- (setq shu(reverse shu))
- (while(= (car shu) "零")(setq shu (cdr shu))) ;后0
- (setq shu(reverse shu))
- )
- ;;;
- (if(numberp j)(setq j(itoa j)))
- (setq shu (strcat "000000000000" j ))
- (while(> (strlen shu)12)(setq shu(substr shu 2)))
- (if(= j "0") "零"
- (progn
- (setq shu
- (append (if(setq q (qian (substr shu 1 4)))
- (append q '("亿")) nil
- )
- (if(setq q (qian (substr shu 5 4)))
- (append q '("万")) nil
- )
- (qian (substr shu 9 4))
- )
- )
- (while(= (car shu) "零")(setq shu (cdr shu))) ;前0
- (setq s 0)
- (setq shu(vl-remove-if '(lambda(x) ;中间 多0
- (if(= x "零")(setq s(1+ s))(setq s 0))(> s 1))
- shu)
- )
- (apply 'strcat shu)
- )
- )
- )
命令: (CHINESE-NUM "200645000010")
"二千零六亿四千五百万零十"
命令: (CHINESE-NUM "2000")
"二千"
命令: (CHINESE-NUM "2001")
"二千零一"
命令: (CHINESE-NUM "20000000000")
"二百亿"
命令: (CHINESE-NUM "2000000500")
"二十亿零五百"
命令: (CHINESE-NUM "0")
"零"
命令: (CHINESE-NUM "23")
"二十三"
命令: (CHINESE-NUM "23000")
"二万三千"
命令: (CHINESE-NUM "23009000")
"二千三百万九千"
|