Я работаю над проблемой № 104 проекта Euler Задача 104 и хотел бы сделать это в javascript.
Чтобы решить эту проблему, мне нужно вычислить большие значения последовательности Фибоначчи, но числа, производимые этой последовательностью, слишком велики, чтобы их можно было обрабатывать классическим числом, поэтому я использую BigInt, поддерживаемый в последних версиях javascript .
Как только у меня есть определенный результат, сохраненный в BigInt, мне нужно проверить его первые 10 и последние цифры.
Чтобы получить цифры из числа, мы обычно делаем что-то вроде приведенного ниже кода, но когда число становится очень большим, все идет не так:
let number = BigInt(123456789)
console.log(number.toString())
console.log(number.toString()[3]) // Result is fine
let bigNumber = BigInt(1234567891111111111111111111111111111)
console.log(bigNumber.toString())
console.log(bigNumber.toString()[30]) // unpredictable result
Кажется, что методы "toString ()" используют только точность типа Number (я полагаю, 2 ^ 53), поэтому мы быстро теряем точность в отношении последних цифр числа BigInt. Проблема в том, что я не могу найти другие способы извлечь эти цифры.
Редактировать:
Мне нужна точность, чтобы быть идеальным, потому что в основном я делаю следующее:
Вычислить Фибоначчи (500) = 280571172992510140037611932413038677189525
Получите 10 последних цифр этого числа: 8677189525 (это то место, где теряется точность)
А затем, чтобы решить мою проблему, мне нужно проверить, что эти 10 последних цифр содержат все цифры от 1 до 9