题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
package main import ( "fmt" "strings" "strconv" ) var dic = map[int]string { 1: "壹", 2: "贰", 3: "叁", 4: "肆", 5: "伍", 6: "陆", 7: "柒", 8: "捌", 9: "玖", 10: "拾", 11: "拾壹", 12: "拾贰", 13: "拾叁", 14: "拾肆", 15: "拾伍", 16: "拾陆", 17: "拾柒", 18: "拾捌", 19: "拾玖", } func calculate(n int) string { var s string if n < 20 { // 由于10应写作“拾”,所以第一前1-19进行查字典处理 s += dic[n] } else if n < 100 { // 大于20小于100的数 if n % 10 == 0 { // 10 的整数倍 s += calculate(n / 10) + "拾" } else { s += calculate(n / 10) + "拾" + calculate(n % 10) } } else if n < 1000 { // 大于100小于1000的数 if n % 100 == 0 { s += calculate(n / 100) + "佰" } else if n % 100 >= 10 { // 十位不为零 s += calculate(n / 100) + "佰" + calculate(n % 100) } else { // 个位不为零 s += calculate(n / 100) + "佰零" + calculate(n % 100) } } else if n < 10000 { // 大于1000小于10000的数 if n % 1000 == 0 { s += calculate(n / 1000) + "仟" } else if n % 1000 >= 100 { // 百位不为零 s += calculate(n / 1000) + "仟" + calculate(n % 1000) } else { s += calculate(n / 1000) + "仟零" + calculate(n % 1000) } } else if n < 100000000 { // 大于10000小于100000000的数 if n % 10000 == 0 { s += calculate(n / 10000) + "万" } else if n % 10000 >= 1000 { // 千位不为零 s += calculate(n / 10000) + "万" + calculate(n % 10000) } else { s += calculate(n / 10000) + "万零" + calculate(n % 10000) } } else { // 大于100000000的数 if n % 100000000 == 0 { s += calculate(n / 100000000) + "亿" } else if n % 100000000 >= 10000000 { // 千万位不为零 s += calculate(n / 10000) + "亿" + calculate(n / 100000000) } else { s += calculate(n / 100000000) + "亿零" + calculate(n / 100000000) } } return s } func main() { var money string fmt.Scan(&money) moneyArray := strings.Split(money, ".") n, _ := strconv.Atoi(moneyArray[0]) f, _ := strconv.Atoi(moneyArray[1]) var s string if n > 0 { s = "人民币" + calculate(n) + "元" } else { s = "人民币" } if f == 0 { s += "整" } else if f < 10 { s += dic[f] + "分" } else if f % 10 == 0 { s += dic[f/10] + "角" } else { s += dic[f/10] + "角" + dic[f%10] + "分" } fmt.Println(s) }
// 本题输入一个字符串,所以采用:fmt.Scan(&money)