フィボナッチシーケンスの新しい各項は、前の2つの項を追加することによって生成されます。 1及び2から出発して、最初の10の用語は次のようになりますC++ Project Euler#2を正しく取得できない
1、2、3、5、8、13、21、34、55、89、...
の観点を考慮してその値が400万を超えないフィボナッチ配列は、偶数の項の和を求める。
私はこれをquestionとも言いましたが、私の場合はあまり役に立ちませんでした。
私は10これまでのシーケンスを制限したときに、私も大切項の和を得ましたが、私のコードです:
#include <iostream>
using namespace std;
int main()
{
int x = 0, y = 1, z, sumeven = 0;
for (int stop=1; stop <= 5; stop++)
{
z = x + y;
x = y;
y = z;
cout << y << endl;
if (y % 2 == 0)
{
sumeven += y;
}
}
cout << "The total is: "<< sumeven << endl;
return 0;
}
これは、上記のコードに私の出力です:
1
2
3
5
8
The total is: 10
Program ended with exit code: 0
4,000,000の値を入力すると問題が発生します。これがコードです。唯一の違いは、シーケンスを印刷しなかったことです。
#include <iostream>
using namespace std;
int main()
{
int x = 0, y = 1, z, sumeven = 0;
for (int stop=1; stop <= 4000000; stop++)
{
z = x + y;
x = y;
y = z;
if (y % 2 == 0)
{
sumeven += y;
}
}
cout << "The total is: "<< sumeven << endl;
return 0;
}
これは上記のコードへの出力です。
The total is: -1833689714
Program ended with exit code: 0
私のコードは完全に小さいシーケンスでは動作するように見えますが、コードが正確に同じであれば4百万個では入力できません。
コンピュータサイエンスの高速履修のために、Intro to Programmingブリッジングクラスをuniで始めました。彼らは2週間の週にレッスンの学期の授業を詰め込んでいます。その終わりまでにC++の基礎を理解したいので、どんな助けでも大歓迎です。ありがとう!
あなたはオーバーフローしていますg 'int'データ型。おそらく最大値が '2^31-1'です。これを避けるには、 'unsigned long long'として' sumeven'を再定義してみてください。 – lcs