アラビア数字で表される正の整数を漢字の大文字に変換する

1733 ワード

一つの面接問題は、面接者の論理的思考能力を調べ、考慮する問題が多く、アラビア数字で表される正の整数を漢字の大文字に変換する.
ここのコードは不正入力を考慮していませんが、面接であれば.面接官とよく交流して、あなたの考えが全面的で、書くコードのロバスト性が強いことを示したほうがいいです.
たとえば、入力された数には記号が付いています.入力された数は整数ではありません.小数で、負数です.あるいは、圧根が数値ではありません.あるいは空の値などです.
主な機能は:例えば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 result

def 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 csdata

def 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 result

data = 1201001
print NumberToChinese(data)