题解 | #人民币转换#

人民币转换

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)

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务