我已经编程了大约4个月了。不过,主要是JavaScript,我现在转到Swift和Java上。
我正在努力实现一个适当的for-in语句来创建一个将数字转换为罗马数字的计算器。(我在JS中做过)。
我做过的事:
variable
循环。
我被困的地方是在数字中循环以找到罗马数字。
import UIKit
class ViewController: UIViewController {
var inputNumber = 0
var outputNumeral = ""
var numberValue = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
var romanNumeral = [
"M",
"CM",
"D",
"CD",
"C",
"XC",
"L",
"XL",
"X",
"IX",
"V",
"IV",
"I"
]
func converter(inputNumber: Int) -> String {
for numb in numberValue {
while numberValue[0] < numb {
romanNumeral + outputNumeral
numb - numberValue[0]
}
}
return outputNumeral
}
}发布于 2020-01-18 17:16:05
我做了这个,它适用于1到4999
let initial = 1980
var val = initial
var countForRoman : [(rom: String, num: Int)] = [] // how many occurences of romanNumbers; don't use dictionaries as not ordered
for (index, number) in numberValue.enumerated() {
let x = val / number
if x > 0 {
countForRoman.append((romanNumeral[index], x))
val = val - x * number
}
}
print(countForRoman) // Just to see how it converted
var romanString = ""
for pairs in countForRoman {
let iter = pairs.num
for _ in 1 ... iter { romanString += pairs.rom }
}
print(initial, "in roman is", romanString)1980年的例子:
[(rom: "M", num: 1), (rom: "CM", num: 1), (rom: "L", num: 1), (rom: "X", num: 3)]
1980 in roman is MCMLXXX如果您想超过4999 (在这里最多可达399 999):
var numberValue = [100_000, 90_000, 50_000, 40_000, 10_000, 9000, 5000, 4000, 1000,900,500,400,100,90,50,40,10,9,5,4,1]
var romanNumeral = [
"(C)",
"(X)(C)",
"(L)",
"(X)(L)",
"(X)",
"M(X)",
"(V)",
"M(V)",
"M",
"CM",
"D",
"CD",
"C",
"XC",
"L",
"XL",
"X",
"IX",
"V",
"IV",
"I"
]
let initial = 9999
var val = initial
var countForRoman : [(rom: String, num: Int)] = [] // how many occurences of romanNumbers; don't use dictionaries as not ordered
for (index, number) in numberValue.enumerated() {
let x = val / number
if x > 0 {
countForRoman.append((romanNumeral[index], x))
val = val - x * number
}
}
print(countForRoman) // Just to see how it converted
var romanString = ""
for pairs in countForRoman {
let iter = pairs.num
for _ in 1 ... iter { romanString += pairs.rom }
}
print(initial, "in roman is", romanString)要获得
[(rom: "M(X)", num: 1), (rom: "CM", num: 1), (rom: "XC", num: 1), (rom: "IX", num: 1)]
9999 in roman is M(X)CMXCIX39999
[(rom: "(X)", num: 3), (rom: "M(X)", num: 1), (rom: "CM", num: 1), (rom: "XC", num: 1), (rom: "IX", num: 1)]
39999 in roman is (X)(X)(X)M(X)CMXCIX对于129_999
[(rom: "(C)", num: 1), (rom: "(X)", num: 2), (rom: "M(X)", num: 1), (rom: "CM", num: 1), (rom: "XC", num: 1), (rom: "IX", num: 1)]
129999 in roman is (C)(X)(X)M(X)CMXCIX只需将此代码封装在转换函数中,您就可以得到它。
https://stackoverflow.com/questions/59801831
复制相似问题