把一个用阿拉伯数字表示的正整数转换成汉字大写表示

来源:互联网 发布:氵淘宝网天猫商城 编辑:程序博客网 时间:2024/04/28 05:20

一个面试题,考查面试者的逻辑思维能力,考虑的问题很多,把一个用阿拉伯数字表示的正整数转换成汉字大写表示

这里代码没有考虑非法输入,但如果是面试。最好跟面试官交流清楚,展现你考虑问题全面,写出的代码鲁棒性强

比如:输入的数带符号,输入的数不是整数,是小数,是负数,或者压根就不是数值,或者是空值等等

主要功能为:比如1201001   转换成:壹佰贰拾万壹仟零壹

                       1200000            转换成:壹佰贰拾万  

下面上代码:

#第一步:按4位4位的分开#第二步:对分开的每一个对象汉字化#第三步:把每个分开的list拼接起来def NumberToChinese(data):  Adict = {1:u'', 2:u'万', 3:u'亿', 4:'兆'}  cdata = '%d' %data  length = len(cdata)  result = u''  numberOfSplit = SplitNumber(cdata)  lenOfSplit = len(numberOfSplit)  for i in range(lenOfSplit):    result = result + ToChinese(numberOfSplit[i]) + Adict[lenOfSplit - i]  return resultdef SplitNumber(cdata):  length = len(cdata)  g = length % 4  csdata = []  if g > 0:    csdata.append(cdata[:g])  k = g  while k < length:    csdata.append(cdata[k:k+4])    k = k + 4  return csdatadef ToChinese(cdata):  length = len(cdata)  lk = length  result = u''  Bdict = {0:u'零', 1:u'壹', 2:u'贰', 3:u'叁', 4:u'肆', 5:u'伍', 6:u'陆', 7:u'柒', 8:u'捌', 9:u'玖'}  Cdict = {1:u'', 2:u'拾', 3:u'佰', 4:u'仟'}  for i in range(length):    #好吧,早上一来就想通了,下面这个if语句就实现了关键的逻辑    #就是对于已经分开的数字,如果开始有0,有一个0,有多个0,同样中间也一样,    #还有末尾有0怎么处理    if int(cdata[i]) == 0:      if i == length - 1 or (i < length -1 and int(cdata[i+1]) == 0):        result = result      else:        result = result + Bdict[int(cdata[i])]    else:       result = result + Bdict[int(cdata[i])] + Cdict[lk]    lk = lk - 1  return resultdata = 1201001print NumberToChinese(data)


阅读全文
0 0