给定一个整数,请你输出这个整数的中文读法。
例如:
153,读作一百五十三
103,读作一百零三
1003,读作一千零三
数据范围:
package main import ( "strconv" ) /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return string字符串 */ func num2cn( n int ) string { digits := []string{ "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", } innerUnit := []string{ "", "十", "百", "千", } outerUnit := []string{ "", "万", "亿", } // 特殊case if n==0{ return digits[0] } sign := 1 if n<0{ sign = -1 n = -n } numStr := strconv.Itoa(n) var res string outerStep := 0 for i:=len(numStr)-1;i>=0;{ step := 0 secNumStr := "" hasRightNonZero := false for step<4 && i>=0{ //特殊case,0是否发音取决于后面还有没有非0数字 if numStr[i]=='0' { if hasRightNonZero{ //多个0只留一个 for step<4 && i>=0 && numStr[i]=='0'{ step++ i-- } secNumStr = digits[0] +secNumStr } else{ step++ i-- } continue } hasRightNonZero = true //处理特殊case 整个part如果为12这种,应该读作十二,1不发音 if step==1 && numStr[i]=='1' && i==0{ secNumStr = innerUnit[step] + secNumStr } else{ // 普通模式 secNumStr = digits[numStr[i]-'0'] + innerUnit[step] + secNumStr } step++ i-- } //特殊case,整个part不发音,也就不能带单位了 if secNumStr==""{ // } else{ res = secNumStr + outerUnit[outerStep] + res } outerStep++ } if sign == -1{ res = "负" + res } return res }