該算法不包含括號(hào)運(yùn)算!
主要思路是利用遞歸算法
1秸苗、先把減法變成加法召娜,把除法變成乘法
2、截取優(yōu)先級(jí)低的算式惊楼,將優(yōu)先級(jí)高的算式遞歸調(diào)用本身算出結(jié)果
直接上代碼
func calcuterResult(input: String) -> Double {
let newStr = input.replacingOccurrences(of: "-", with: "+-") //減法變加法
.replacingOccurrences(of: "/", with: "*1/") //除法變乘法
return calcuter(input: newStr)
}
func calcuter(input: String) -> Double {
if input.contains("+") { // 加法運(yùn)算
var result = 0.0
let values = input.components(separatedBy: "+")
for value in values {
guard !value.isEmpty else { continue }
if let num = Double(value) {
result = result + num
} else {
result = result + calcuter(input: value)
}
}
return result
} else { // 乘法結(jié)果
var result = 1.0
let values = input.components(separatedBy: "*")
for value in values {
guard !value.isEmpty else { continue }
if let num = Double(value) {
result = result * num
} else {
// "1/2" ,"1/5"
let coms = value.components(separatedBy: "/")
if let num = coms.last {
result = result * 1 / (Double(num) ?? 1)
}
}
}
return result
}
}