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

intデータ型のサイズ/容量をからunsigned longまたはに増やしますunsigned long long。これらのそれぞれのサイズは、超えるとビットパターンを作成し、ほぼ確実に誤った値を作成します。また、数値が負になることは決してないため、数値のサイズの一部を負の値(ビット)に使用できるようにすると、表現できる最大数が無駄になります。

また、このケースを検出するためのチェックを追加する必要があります。このアルゴリズムで値が下がった場合は、データ型の制限を明らかに超えています。この時点で、数値が大きすぎるために計算できない丁寧なエラーを出力します。

于 2012-09-16T14:56:20.853 に答える
0

整数がオーバーフローしています。グーグルの「整数のオーバーフロー」と署名されたintの容量。unsigned intに変更してみてください。そうすると、より大きな数値でオーバーフローすることに気付くでしょう。

于 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です。longまたはlong longa、、bおよびに使用してみてくださいcこれは、さまざまなデータ型に関する優れたリファレンスです。

于 2012-09-16T14:55:34.257 に答える