如果读者不知道阶乘函数是采用u64类型编写的,而我正在尝试使用BigUint来通过阶乘函数获取更大的数字。
我正在尝试将一个整数转换为Rust中的BigUint,这是我要更改的代码:
pub fn factorial_iterative(n: u64) -> u64 {
(1..n+1).fold(1, |p, n| p*n)
}
我一直在关注rust的便捷自动校正功能,并且提出了以下建议:
extern crate num;
use num::BigUint;
pub fn factorial_iterative(n: BigUint) -> BigUint {
(1..n+1).fold(1 as <num::BigUint as Trait>::to_u64, |p, n| p*n)
}
但是现在它抛出了错误:
failed to resolve use of undeclared type or module Trait
要进行这项工作,我需要添加或更改什么?
最佳答案
获得1的正确方法是
use num::BigUint;
use num::One;
pub fn factorial_iterative(n: u64) -> BigUint {
(1..=n).fold(BigUint::one(), |p, n| p*n)
}
您无法使用BigUint进行范围调整,因此必须使用u64范围。您可以使用
..=
获取包含范围。 use crate::num::One;
是使用::one()
所必需的,因为它是在One
特性中实现的,该特性需要在范围内。关于rust - 无法在阶乘函数中解析为Rust中的Trait,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57840696/