题解 | #学英语#
学英语
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 ?? ""
}
}