Size: 1498
Comment:
|
← Revision 3 as of 2009-12-25 07:08:56 ⇥
Size: 1646
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
源于qq上Jaina(16009966)的提问. 花了一个晚上实现了一下, | 源于qq上Jaina(16009966)的提问. 花了一个晚上实现了一下, 基本想法是4位为一个断, 用conv4转换, 然后再用conv组合之. 程序在Windows2003, python2.4下调试通过. 注意编码问题. |
- 源于qq上Jaina(16009966)的提问. 花了一个晚上实现了一下, 基本想法是4位为一个断, 用conv4转换, 然后再用conv组合之. 程序在Windows2003, python2.4下调试通过. 注意编码问题.
1 # coding:utf-8
2
3 UUNIT=[u'', u'十' , u'百' , u'千']
4 BUINT = [u'', u'万', u'亿', u'万亿' , u'亿亿']
5 NUM=[u'零',u'一',u'二', u'三', u'四', u'五' , u'六', u'七', u'八', u'九']
6
7 def conv4(num, flag=False):
8 ret = u''
9 s = str(num)
10 l = len(s)
11 assert(len(s) <= 4)
12 if flag and len(s)<4:
13 ret = ret + NUM[0]
14 for i in xrange(l):
15 if s[i] != '0':
16 ret = ret + NUM[int(s[i])]+UUNIT[l-i-1]
17 elif s[i-1] != '0':
18 ret = ret + NUM[0]
19 return ret
20
21 def conv(num):
22 ss = str(num)
23 l = len(ss)
24 j = l / 4
25 jj = l % 4
26 lss = [ss[0:jj] for i in [1] if ss[0:jj]] \
27 + [ss[i*4+jj:(i+1)*4+jj] for i in xrange(j) if ss[i*4+jj:(i+1)*4+jj] ]
28 print lss
29 ul = len(lss)
30 ret = u''
31 zflag = False
32 for i in xrange(ul):
33 bu = BUINT[ul-i-1]
34 tret = conv4(int(lss[i]), flag = i)
35 if tret[-1:] == NUM[0]:
36 tret = tret[:-1]
37 if tret:
38 print zflag , (tret+bu).encode('mbcs')
39 if zflag and tret[0] != NUM[0] :
40 ret = ret + NUM[0] +tret+bu
41 else:
42 ret = ret + tret+bu
43 zflag = False
44 else:
45 zflag = True
46 return ret
47
48 if __name__ == '__main__':
49 #print conv(11111)
50 print conv(103056).encode('mbcs')
51 print conv(101000).encode('mbcs')
52 print conv(1200999100000000010).encode('mbcs')
53