【发布时间】:2020-04-29 00:24:23
【问题描述】:
我写了上面引用的简单代码来检查斐波那契数列中的整数是否不包含0或5,如果整数只包含1、2、3、4、6、7、8,则减少到1237,或 9 作为数字;如果是,则打印序列的成员。有趣的是,从数字游戏的角度来看,斐波那契数列中只有 23 个这样的整数。
当整数变大时,我必须使用 Swift-BigInt 库:
func getFib1237s() {
// Some temporary variables.
var a = BInt(0)
var b = BInt(1)
var m = BInt(1)
var i = BInt(0)
var z = BInt(1)
// Get the numbers until crash...
while i < z {
let temp = a
a = b
b = b + temp
print("a: ", a)
var str = String(a)
print("String start: ", str)
str = str.replacingOccurrences(of: "9", with: "3")
print("String after 9 reducto: ", str)
str = str.replacingOccurrences(of: "6", with: "23")
print("String after 6 reducto: ", str)
str = str.replacingOccurrences(of: "8", with: "2")
print("String after 8 reducto: ", str)
str = str.replacingOccurrences(of: "4", with: "2")
print("String after 4 reducto: ", str)
if (str.firstIndex(of:"5") == nil) && (str.firstIndex(of: "0") == nil) && str.contains("1") && str.contains("2") && str.contains("3") && str.contains("7") {
print(m, "Fib 1237 number is ", a, " | Digits: ", str.count)
m+=1
}
i+=1
z+=1
}
}
显然,在 20 位标记处或附近,String() 方法失败并抛出错误,不执行检查,因为根据调试器,整数被完全更改为随机的其他整数。
那么,在 Swift 中是否有任何 BigInt 或 String 解决方法/替代方案?我编写的 Ruby 代码在 Xcode 中运行良好,但我试图在这个项目中专门使用 Swift(和 metal),该项目最终需要在 iOS 上运行以用于商业/生产目的。
【问题讨论】:
-
忘掉这个 pod。你应该使用 Swift 原生
Decimal类型 -
试试
a.asString(radix: 10)? -
“减少到 1237”是什么意思?您要查找哪 23 个整数?
-
如果我理解正确的话,你想要
317811、267914296、8944394323791464、83621143489848422977等等? -
是的,确切地说,317811 是第一个,顺便提一下,它还具有一个有趣的特性,即相邻比率的 Phi 的收敛性和精度。 0 也可以是 23 的数字,我打错了。
标签: ios swift type-conversion metal bigint