gpt4 book ai didi

ios - 如何获取罗马数字字符串并将其转换为 base10 数字?

转载 作者:行者123 更新时间:2023-11-30 11:41:44 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




所以我正在构建一个示例项目,它采用罗马数字并将其转换为 base10 数字。我试图让它发挥作用,但没有实现我的目标。有谁知道如何做到这一点?我在下面添加最多 10 个罗马数字以供引用。谢谢!

1 - 我
2 - 二
3 - 三
4 - 四
5 - V
6 - 六
7 - 七
8 - 八
9 - 九
10 - X

最佳答案

您所需要的只是以相反的方式遍历您的罗马字符串字符并映射这些字符值。从 maxValue 等于零开始,切换字母值,将其保存为 maxValue,如果该值等于 maxValue,则添加它,否则减去实际值。您也可以使用regex (严格与否)验证并在失败时抛出错误。试试这样:

Xcode 9.x • Swift 4.x

注:对于 swift 3 版本或更早的版本检查编辑历史。

extension String {
enum RomanParsingError: Error {
case invalidNumber
}
func romanNumeralValue() throws -> Int {
guard range(of: "^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$", options: .regularExpression) != nil else {
throw RomanParsingError.invalidNumber
}
var result = 0
var maxValue = 0
uppercased().reversed().forEach {
let value: Int
switch $0 {
case "M":
value = 1000
case "D":
value = 500
case "C":
value = 100
case "L":
value = 50
case "X":
value = 10
case "V":
value = 5
case "I":
value = 1
default:
value = 0
}
maxValue = max(value, maxValue)
result += value == maxValue ? value : -value
}
return result
}
}

用法:
do {
let decimal = try "MCMLXXVIII".romanNumeralValue()
print(decimal) // 1978
} catch {
print(error)
}


do {
let decimal = try "IIIV".romanNumeralValue()
print(decimal)
} catch {
print(error) // "invalidNumber\n"
}

关于ios - 如何获取罗马数字字符串并将其转换为 base10 数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com