题解 | #人民币转换#
人民币转换
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)
查看13道真题和解析
