gpt4 book ai didi

c++ - 输出一个15位数字

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

我有一个程序,假设要找到斐波那契数列中 1 到 75 之间所有可被 3 整除的数字之和,并将它们相加。我让程序正常工作,我遇到的唯一问题是能够显示如此大的数字。有人告诉我答案应该是 15 位数字。我试过 long long、long double、unsigned long long int,但都没有产生正确的输出(它们产生负数)。

代码:

 long fibNum(int kth, int nth);

int main()
{
int kTerm;
int nTerm;

kTerm = 76;
nTerm = 3;

std::cout << fibNum(kTerm, nTerm) << std::endl;

system("pause");
return 0;
}

long fibNum(int kth, int nth)
{
int term[100];
long firstTerm;
long secondTerm;
long exactValue;

int i;

term[1] = 1;
term[2] = 1;
exactValue = 0;

do
{
firstTerm = term[nth - 1];
secondTerm = term[nth - 2];
term[nth] = (firstTerm + secondTerm);

nth++;
}
while(nth < kth);

for(i = 1; i < kth; i++)
{
if(term[i] % 3 == 0)
{
term[i] = term[i];
}
else
term[i] = 0;

exactValue = term[i] + exactValue;
}

return exactValue;

我发现问题与数组有关。该数组不能存储第 47 项,即 10 位数字。现在我不知道该怎么办

最佳答案

类型 long long 保证至少为 64 位(并且在我见过的每个实现中都是准确的 64 位)。它的最大值 LLONG_MAX 至少为 263-1,或 9223372036854775807,即 19 位十进制数字 -- 所以 long long 足以表示 15 位数字。

只需始终使用 long long 类型。在您的代码中,您有一个 long double 类型的变量,它的范围比 long long 大得多,但精度可能较低(这可能导致无法确定给定的数字是 3 的倍数。)

您也可以使用 unsigned long long,其上限至少为 264-1,但 long longunsigned long long 对于您的目的来说应该足够宽了。

在 C++ 中显示一个 long long 值很简单:

long long num = some_value;
std::cout << "num = " << num << "\n";

或者,如果出于某种原因您更喜欢 printf,请对 long long 使用 "%lld" 格式,"%llu " 用于 unsigned long long

(对于太宽而无法放入 64 位的整数,有一些软件包可以处理任意大的整数;最突出的是 GNU 的 GMP。但是对于 15 位整数则不需要它。)

关于c++ - 输出一个15位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22026564/

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