题解 | #学英语#

学英语

http://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

Swift题解

import Foundation

while let n = Int64(readLine() ?? "") {
    let str = n.formatedExpress
    let array = str.components(separatedBy: ",").map{ Int($0) ?? 0 }
    var suffix = [String].init(repeating: "", count: array.count)
    let count = array.count
    if count == 4 {
        suffix = ["billion", "million", "thousand", ""]
    } else if count == 3 {
        suffix = ["million", "thousand", "", ""]
    } else if count == 2 {
        suffix = ["thousand", "", "", ""]
    } else {
        suffix = ["", "", "", ""]
    }
    var result = ""
    for i in 0 ..< array.count {
        let val = array[i]
        let express = expressOfPart(val)
        result += express
        let tail = suffix[i]
        if tail.count > 0 {
            result += " "
            result += tail
        }
        if i < array.count - 1 {
            result += " "
        }
    }
    print(result)
}
func expressOfPart(_ n: Int) -> String {
    let dict1 = [1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine"]
    let dict2 = [11: "eleven", 12: "twelve", 13: "thirteen", 14: "fourteen", 15: "fifteen", 16: "sixteen", 17: "seventeen", 18: "eighteen", 19: "nineteen"]
    let dict3 = [2: "twenty", 3: "thirty", 4: "forty", 5: "fifty", 6: "sixty", 7: "seventy", 8: "eighty", 9: "ninety"]
    let h = n / 100
    let t = (n % 100) / 10
    let last = n % 10
    let lastTwo = n % 100
    var result = ""
    if h > 0 {
        result += dict1[h]! + " hundred"
    }
    if(lastTwo == 0) {
        return result
    }
    if lastTwo < 10 {
        if result.count > 0 {
            result += " "
            if h > 0 {
                result += "and "
            }
        }
        result += dict1[lastTwo]!
    } else if lastTwo == 10 {
        if result.count > 0 {
            result += " and "
        }
        result += "ten"
    } else {
        if result.count > 0 {
            result += " and "
        }
        if lastTwo < 20 {
            result += dict2[lastTwo]!
        } else {
            result += dict3[t]!
            if last > 0 {
                if result.count > 0 {
                    result += " "
                    if h > 0 && !result.contains("and") {
                        result += "and "
                    }
                }
                result += dict1[last]!
            }
        }
    }
    return result
}


extension Int64 {
    var formatedExpress: String {
        let fmt = NumberFormatter.init()
        fmt.positiveFormat = ",###"
        let str = fmt.string(from: .init(value: self))
        return str ?? ""
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 15:37
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务