【发布时间】:2017-04-18 10:04:06
【问题描述】:
最近我一直在开发一个库来处理具有数千位数字的非常大的数字。 我现在已经为这些事情处理了一个阶乘函数,因为我刚刚设置了乘法。
largeNum factorial(largeNum& input) {
if (input > one) return (input * factorial(--input));
else return one;
}
"one" 是一个 largeNum,它的值定义为 "one" 并带有 "+" 号,因为我还没有实现整数转换。
Factorial 是 largeNum 类的友元函数。我没有收到任何语法错误,它必须是合乎逻辑的。
前缀 -- 运算符已正确重载并经过测试。
乘法和“>”运算符也是如此。
- 输入 5 返回 24,即 4!
- 输入 6 返回 120,即 5!。 等等。
也许我只是因为睡眠不足而完全失明,但我需要一些帮助。 干杯。
【问题讨论】:
-
您正在对评估顺序做出假设,这会导致未定义的行为。我建议将
--input更改为input - 1。 -
factorial应该将参数作为 const 引用而不是没有 const 引用。 -
“减号运算符很容易实现......”我想你说的是一元
-,这在这里并不重要 -
你的二进制
-是什么样子的? -
为什么阶乘函数需要访问数字类的内部?换句话说:为什么它是朋友?
标签: c++ class math friend factorial