0

我用 C++ 编写了一个程序来输出你告诉它的斐波那契数列中的数字。它一直工作到大约第 47 个数字,之后它会打印出完全不同的数字,甚至是负数,而且它们都没有超过 9 或 10 个单独的整数。这是代码

#include <iostream>

int a = 0;
int b = 1;
int c;
int var = 0;
int num;

void fibonacci()
{
     using namespace std;
     c = a;          
     a = a + b;           
     b = c;
     var += 1;
}

void loop()
{    
    using namespace std;
    for (int iii=0; iii<num; iii++)
    fibonacci();
}

int main()
{
    using namespace std;
    cout << "What fibonacci number do you want to know? ";
    cin >> num;
    cin.get();
    loop();
    cout << "" << endl;
    cout << c << endl;
    cin.get();

    a = 0;
    b = 1;
    var = 0;

    return main();
}

c++ 一次可以打印多少个字符是否有某种限制?

4

5 回答 5

6

Fib(47) = 2971215073大于2147483647

std::numeric_limits<int>::max() == 2^31 - 1 == 2147483647在你的情况下。

因此,您的结果整数在 处溢出num == 47

@jogojapan 补充说:

sizeof(int) 是 4 字节(即在许多平台上),即 32 位。2^31-1 [numeric_limits::max()] 是可以使用 int 表示的最大数字(在那些平台上)。

于 2012-09-16T14:55:19.293 回答
1

将您的数据类型大小/容量从 anint增加到 anunsigned longunsigned long long。这些中的每一个都有一个大小,当超过该大小时,会创建一个位模式,这将创建一个几乎肯定不正确的值。此外,由于您的数字永远不会是负数,因此允许将数字的部分大小用于负值(有点)会浪费您可以表示的最大数字。

此外,您应该添加一个检查来检测这种情况。如果该算法中的某个值下降,则您显然超出了数据类型的限制。此时,打印一个礼貌错误,您无法计算该数字,因为它太大了。

于 2012-09-16T14:56:20.853 回答
0

你的整数溢出了。谷歌“整数溢出”和一个有符号整数的容量。尝试将其更改为无符号整数,您会注意到它会以更高的数字溢出。

于 2012-09-16T14:55:28.887 回答
0

这是我在 C 中输出 Fabonica 系列的代码:

    #include<stdio.h>
    int main(){
    int k,r;
    long int i=0l,j=1,f;

    //Taking maximum numbers form user
    printf("Enter the number range:");
    scanf("%d",&r);

    printf("FIBONACCI SERIES: ");
    printf("%ld %ld",i,j); //printing firts two values.

    for(k=2;k<r;k++){
         f=i+j;
         i=j;
         j=f;
         printf(" %ld",j);
    }

    return 0;
}

样本输出:

输入数字范围:15

斐波那契系列:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

在 c 中使用数组的斐波那契数列

 #include<stdio.h>
int main(){
int i,range;
long int arr[40];

printf("Enter the number range: ");
scanf("%d",&range);

arr[0]=0;
arr[1]=1;

for(i=2;i<range;i++){
     arr[i] = arr[i-1] + arr[i-2];
}

printf("Fibonacci series is: ");
for(i=0;i<range;i++)
     printf("%ld ",arr[i]);


    return 0;
}
于 2012-09-16T17:42:35.323 回答
-1

这不是因为 cout 可以处理的位数有限制。这是因为你的数字太大而无法适应int。尝试使用longor和。long long_ 是关于不同数据类型的一个很好的参考。abc

于 2012-09-16T14:55:34.257 回答