把一个用阿拉伯数字表示的正整数转换成汉字大写表示
生活随笔
收集整理的這篇文章主要介紹了
把一个用阿拉伯数字表示的正整数转换成汉字大写表示
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一個面試題,考查面試者的邏輯思維能力,考慮的問題很多,把一個用阿拉伯?dāng)?shù)字表示的正整數(shù)轉(zhuǎn)換成漢字大寫表示
這里代碼沒有考慮非法輸入,但如果是面試。最好跟面試官交流清楚,展現(xiàn)你考慮問題全面,寫出的代碼魯棒性強
比如:輸入的數(shù)帶符號,輸入的數(shù)不是整數(shù),是小數(shù),是負(fù)數(shù),或者壓根就不是數(shù)值,或者是空值等等
主要功能為:比如1201001 ? 轉(zhuǎn)換成:壹佰貳拾萬壹仟零壹
? ? ? ? ? ? ? ? ? ? ? ?1200000 ? ? ? ? ? ?轉(zhuǎn)換成:壹佰貳拾萬 ?
下面上代碼:
#第一步:按4位4位的分開 #第二步:對分開的每一個對象漢字化 #第三步:把每個分開的list拼接起來 def NumberToChinese(data):Adict = {1:u'', 2:u'萬', 3:u'億', 4:'兆'}cdata = '%d' %datalength = 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 % 4csdata = []if g > 0:csdata.append(cdata[:g])k = gwhile k < length:csdata.append(cdata[k:k+4])k = k + 4return csdatadef ToChinese(cdata):length = len(cdata)lk = lengthresult = 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語句就實現(xiàn)了關(guān)鍵的邏輯#就是對于已經(jīng)分開的數(shù)字,如果開始有0,有一個0,有多個0,同樣中間也一樣,#還有末尾有0怎么處理if int(cdata[i]) == 0:if i == length - 1 or (i < length -1 and int(cdata[i+1]) == 0):result = resultelse:result = result + Bdict[int(cdata[i])]else: result = result + Bdict[int(cdata[i])] + Cdict[lk]lk = lk - 1return resultdata = 1201001 print NumberToChinese(data)總結(jié)
以上是生活随笔為你收集整理的把一个用阿拉伯数字表示的正整数转换成汉字大写表示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何判断Linux 内核是稳定版本还是测
- 下一篇: 【Java面试】Linux