数的读法

时间限制: 1Sec 内存限制: 128MB 提交: 1037 解决: 350

**题目描述**
```
Tom教授正在给研究生讲授一门关于基因的课程，有一件事情让他颇为头疼：一条染色体上有成千上万个碱基对，它们从0开始编号，到几百万，几千万，甚至上亿。

比如说，在对学生讲解第1234567009号位置上的碱基时，光看着数字是很难准确的念出来的。

所以，他迫切地需要一个系统，然后当他输入12  3456  7009时，会给出相应的念法：

十二亿三千四百五十六万七千零九

用汉语拼音表示为

shi  er  yi  san  qian  si  bai  wu  shi  liu  wan  qi  qian  ling  jiu

这样他只需要照着念就可以了。

你的任务是帮他设计这样一个系统：给定一个阿拉伯数字串，你帮他按照中文读写的规范转为汉语拼音字串，相邻的两个音节用一个空格符格开。

注意必须严格按照规范，比如说“10010”读作“yi  wan  ling  yi  shi”而不是“yi  wan  ling  shi”，“100000”读作“shi  wan”而不是“yi  shi  wan”，“2000”读作“er  qian”而不是“liang  qian”。
```
**输入**

- 有一个数字串，数值大小不超过2,000,000,000。

**输出**

- 是一个由小写英文字母，逗号和空格组成的字符串，表示该数的英文读法。 

**样例输入**
```
1234567009 

```
**样例输出**
```
shi er yi san qian si bai wu shi liu wan qi qian ling jiu
```

### 思路一


```
import math
num=input().strip()
map1={'0':'ling','1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu'}
map2=[None,'shi','bai','qian']
num_lis=[]

'''
输入按照单位分开
'''
while num:
    if len(num)//4>0:
        num_lis.append(num[-4:])
        num=num[:-4]
#         print(num)
    else:
        num_lis.append(num)
        num=None
# print(num_lis)


'''
对每一个单位进行操作的操作函数
'''
def op(s):
    j=0
    res=[]
    for i in s[::-1]:
        if i=='0':
            if res and res[-1]=='ling':
                j+=1
                continue
            if not res:
                j+=1
                continue
            else:
                res.append(map1[i])
                j+=1
                continue
        else:
            res.append(map2[j])
            res.append(map1[i])
            j+=1
    if res and res[-1]=='yi' and res[-2]=='shi':
        del res[-1]
    return res[::-1]
# print(num_lis)


'''
输出结果
'''
re=[]
m=[None,'wan','yi','wanyi']
for i in range(len(num_lis))[::-1]:
    if op(num_lis[i]):
        re+=op(num_lis[i])
        re.append(m[i])
# print(re)
for i in re:
    if i :
        print(i,end=' ')
# print(' '.join(re))
        
        
        
```

    1234567009 
    ['7009', '3456', '12']
    shi er yi san qian si bai wu shi liu wan qi qian ling jiu 

### 思路二


```
s=input()
map_={'0':'ling','1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu'}
map2=['','shi','bai','qian']
s1=''
s2=''
s3=''
n=len(s)
nl=[0]*4
for i in range(4):
    if n<=0:
        break
    nl[i]=4 if n>=4 else n
    n-=4
s1=s[0:nl[3]]
s2=s[nl[3]:nl[3]+nl[2]]
s3=s[nl[3]+nl[2]:nl[2]+nl[1]+nl[3]]
s4=s[nl[2]+nl[1]+nl[3]:nl[2]+nl[1]+nl[3]+nl[0]]
res=[]



def op(s,res,map_,map2):
    j=0
    res=[]
#     print(s1,s2,s3)
    for i in s[::-1]: 
        if i=='0':
            
            if  res and res[-1]=='ling':
                j+=1
                continue
            if not res:
                j+=1
                continue 
            else:
                res.append(map_[i])
                j+=1
                continue
        res.append(map2[j])
        res.append(map_[i])
        j+=1
    if res and res[-1]=='yi' and res[-2]=='shi':
        del res[-1]
    return res





r4=op(s4,res,map_,map2)
res+=r4

if nl[1]>0:
    res.append('wan')
    r3=op(s3,res,map_,map2)
    if r3:
        res+=r3
    else:
        res.pop(-1)
    
    
if nl[2]>0:
    res.append('yi')
    r2=op(s2,res,map_,map2)
    if r2:
        res+=r2
    else:
        res.pop(-1)
    
    
if nl[3]>0:
    res.append('wan yi')
    r1=op(s1,res,map_,map2)
    if r1:
        res+=r1
    else:
        res.pop(-1)

res=reversed(res)
a=' '.join(res).split()
print(' '.join(a))
```

    2000000000000
    er wan yi