Swift实现质因数分解并返回符合要求格式的字符串
解决思路
- 你现有逻辑输出的
numberArr已经是按升序排列的质因数列表,相同质因数连续排列,只需遍历数组统计每个质因数的出现次数即可得到对应指数 - 遍历统计得到的(质数, 指数)元组数组,按规则拼接字符串:
- 指数为1时,格式为
(质数) - 指数大于1时,格式为
(质数xx指数)
- 指数为1时,格式为
- 所有片段拼接完成后即为最终返回结果
完整实现代码
func factors(_ number: Int) -> String { var changedNumber = number var numberArr = [Int]() while changedNumber >= 2 { for i in 2...changedNumber { if changedNumber % i == 0 { numberArr.append(i) changedNumber /= i break } } } // 统计质因数和对应指数 var factorTuples = [(prime: Int, count: Int)]() var currentPrime: Int? var currentCount = 0 for num in numberArr { if num == currentPrime { currentCount += 1 } else { if let prime = currentPrime { factorTuples.append((prime, currentCount)) } currentPrime = num currentCount = 1 } } // 加入最后一组质因数统计结果 if let prime = currentPrime { factorTuples.append((prime, currentCount)) } // 按要求拼接结果字符串 var result = "" for tuple in factorTuples { if tuple.count == 1 { result += "(\(tuple.prime))" } else { result += "(\(tuple.prime)xx\(tuple.count))" } } return result }
调用factors(86240)即可得到示例要求的输出"(2xx5)(5)(7xx2)(11)"。
内容的提问来源于stack exchange,提问作者pakobongbong
相关产品推荐
相关产品推荐

