Я написал вышеупомянутый простой код, чтобы проверить, не содержат ли целые числа в последовательности Фибоначчи 0 или 5, и уменьшил до 1237, если целое число содержит только 1,2,3,4,6,7,8, или 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 или около git или около нее метод String()
завершается ошибкой и выдает ошибки, не выполняя проверку, потому что, согласно отладчику, целое число заменяется случайным другим целым числом полностью.
Итак, есть ли какие-либо BigInt
или String
обходные пути / альтернативы в Swift? Я написал Ruby код, который отлично работает в XCode, но я пытаюсь использовать исключительно Swift (и металл) для этого проекта, который в конечном итоге должен работать на iOS для коммерческих / производственных целей.