Rust 未能在阶乘函数中解析为特征

Rust 未能在阶乘函数中解析为特征,rust,factorial,Rust,Factorial,如果读者不知道阶乘函数是采用u64类型编写的,我尝试使用一个BigUint来代替阶乘函数获得更大的数字 我正在尝试将一个整数转换为Rust中的BigUint这是我正在尝试更改的代码: pub-fn阶乘迭代(n:u64)->u64{ (1..n+1).折叠(1,| p,n | p*n) } 我刚才一直在关注rust的便捷自动校正,我想到了这个: extern板条箱数量; 使用num::BigUint; pub-fn阶乘迭代(n:BigUint)->BigUint{ (1..n+1).折叠(1 a

如果读者不知道阶乘函数是采用u64类型编写的,我尝试使用一个BigUint来代替阶乘函数获得更大的数字

我正在尝试将一个整数转换为Rust中的BigUint这是我正在尝试更改的代码:


pub-fn阶乘迭代(n:u64)->u64{
(1..n+1).折叠(1,| p,n | p*n)
}
我刚才一直在关注rust的便捷自动校正,我想到了这个:

extern板条箱数量;
使用num::BigUint;
pub-fn阶乘迭代(n:BigUint)->BigUint{
(1..n+1).折叠(1 as::to_u64,| p,n | p*n)
}
但现在它向我抛出了一个错误:
无法解决未声明类型或模块特征的使用问题


我需要添加或更改什么才能使其生效?

获得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范围。您可以使用
。=
获取包含范围。
使用板条箱::num::One
需要使用
::one()
,因为它是在
one
特性中实现的,该特性需要在范围内。

几乎正确。我纠正该功能的方法是:

使用num::one;
使用num::{BigUint,One};
pub-fn阶乘迭代(n:BigUint)->BigUint{
(1()…n+1())。折叠(BigUint::1(),|p,n | p*n)
}

多谢各位。您可以帮助我找到正确的trait来更正代码。

trait不是代码中的关键字,而是类型或trait,因此编译器搜索itA时稍微不依赖于一个示例的值,可能是导入
num::bigint::ToBigUint
,然后调用
1。to_biguint()
,但是,它在mod.rs文件中,我需要将它调用到一个变量中,该变量使用
use fraction::{Decimal,fraction}它接受
u64
类型而不是
BigUint
。因此,我想将输入类型转换为
BigUint
,但当您在
Decimal::from_fraction(Fration::new(f,factorial_iterative(n))
中调用
n
时,我希望输出为
u64
。否则,我绝对肯定您的答案会起作用。您可以通过
将任何u64转换为BigUint,方法是
to_BigUint
。反之则毫无意义。如果您的输出适合于u64,那么当我输入
1时,就不需要输入biguintw。to_biguint
它有一个错误,并说要尝试将其更改为
1\u i32
。然后它说没有
to_biguint
方法。我必须修复程序的所有剩余部分才能使用biguint,剩下的就是
n
需要一个类型注释。我试过查找,但我不知道需要做什么。如果有人想让我发布整个程序文件树,请告诉我。你能发布准确的编译器消息吗?
pub fn factorial_iterative(n:u64)->u64{(1..n+1)。fold(1,| p,n | p*n)}
这是它所基于的代码。