Как рассчитать 100000! или больше в Rust? - PullRequest
3 голосов
/ 06 мая 2020

Функция для вычисления факториала выглядит следующим образом. Но ясно, что usize недостаточно велик?

fn main() {
    println!("{}", factorial(100000));
}
fn factorial(n: usize) -> usize {
    (1..n+1).fold(1, |a, b| a * b)
}

сообщение об ошибке: поток 'main' запаниковал при 'попытке умножить с переполнением'

Позже я планировал использовать рекурсию для вычисления факториал, но результат был inf

fn factorial(num: f64) -> f64 {
    match num {
        0.0 => 1.0,
        1.0 => 1.0,
        _ => factorial(num - 1.0) * num,
    }
}

1 Ответ

2 голосов
/ 06 мая 2020

Вы можете использовать BigUint, например:

use num::{BigUint, One};

fn factorial(n: usize) -> BigUint {
    (1..=n).fold(BigUint::one(), |a, b| a * b)
}

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...