gpt4 book ai didi

c++ - 范围内的产品

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:37 26 4
gpt4 key购买 nike

我正在尝试为此编写一个小循环

enter image description here

其中 Pi 是关于 k 范围的论证的(如果您不知道,只是彻底了解)乘积。有点像求和符号。无论如何,我似乎无法理解如何写这个。我写了这个小函数,但它不是我想要的。它只是在我指定的范围内打印 (7i - 2) 的结果。它不是将它们全部相乘,我知道我没有要求它这样做。我什至不确定如何要求它这样做。寻找提示,不一定是答案(不过,那也很好)。

到目前为止我做了什么:

void prod(long int& num)
{
for ( int i = 1; i <= 25; ++i)
{
num =(-1.0)*((7.0*i - 2));

std::cout << num << std::endl;

}
}

最佳答案

这在几个层面上都是一个有趣的问题,但也有一些问题需要指出。首先,nhgrif 发布的算法是正确的(并被接受)但请记住,对于给定的“product”函数,“int”和“long”返回值都很快溢出,因此代码实际上从未给出 k = 25 的正确答案。事实上,对于 int 类型,所述算法只给出 k = 7 的正确答案,即 1838865600(在我的机器上)。之后,对于 k >= 8,数值不正确。

这可以通过运行 nhgrif 的算法看到,prod() 函数的输出显示为 up k = 10:

i = 1: -5
i = 2: -60
i = 3: -1140
i = 4: -29640
i = 5: -978120
i = 6: -39124800
i = 7: -1838865600
i = 8: -2147483648
i = 9: -2147483648
i = 10: -2147483648
.
.
.

从上面我们看到 int 的最大值(幅度)在 i = 8 时很快达到,这可以通过运行来检查:

#include <iostream>
#include <limits>

int main(int argc, const char * argv[])
{
int maxInt = std::numeric_limits<int>::max();
std::cout << "max: " << maxInt << std::endl;
return 0;
}

给出期望值:

max: 2147483647

我们还看到,对于 long 数据类型,我们遇到了同样的问题,但可以将其增加到 k = 12,直到在 k = 13 时达到 long 的限制,即:-9223372036854775808。

最重要的是,上面发布的代码给出了 Matt 最初要求的 k = 25 值的错误答案。

解决方案是对数字使用字符串表示。这种字符串表示通常用于超出普通数据类型限制的大数字(例如,# of Rubik's cube states 或# of atoms in a gram of carbon)。但我认为这可能需要考虑一下,因为计算需要表示为对字符串的操作,以避免直接处理 int 和 long。

有趣的是,Matt 给出的函数直接求和为任意 k 的封闭形式解:

enter image description here

用 Gamma 函数表示,这需要一些额外的代码才能在 C++ 中定义(但 C++ 11 已经定义了它)。

作为引用,对于 k = 25,Matt 的 prod() 函数的答案是:-6472463290438308956636841782995191201792000000

就其值(value)而言,您还可以递归地编写算法:

#include <iostream>

long prod(int k);

int main(int argc, const char * argv[])
{
int k = 10;
for (int i = 1; i <= k; i++) {
std::cout << "i = " << i << ": " << -prod(i) << std::endl;
}

return 0;
}

long prod(int k) {
if (k == 1) {
return 5;
}
else {
return (7*k - 2)*prod(k - 1);
}
}

但是这段代码也有上面讨论的同样的溢出问题。

关于c++ - 范围内的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com