2014-04-01 62 views
0

我正在嘗試euler項目問題​​2來提高我的編程和解決問題的能力。我被困在問題2然而,我不知道我在代碼中出錯。這裏是問題:爲什麼我的歐拉項目代碼有缺陷?

斐波納契數列中的每個新項都是通過添加前兩項生成的。通過用1和2開始,第一10項將是:

1,2,3,5,8,13,21,34,55,89,...

由考慮斐波那契數列中不超過四百萬的項,找到偶數項的和。

這是我在解決方案的嘗試。

#define MAX 4000000 

int main() 
{ 
    int num1=1, num2=1, temp, sum; 

    while(num1<MAX || num2<MAX) 
    { 
     temp=num1+num2; 
     num1=num2; 
     num2=temp; 
     if(temp%2==0) 
      sum += temp; 
    } 
    printf("Sum= %d", sum); 
} 

我得到(這是錯誤的)的輸出是

總和= 9212508

+1

請閱讀此:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

+0

我粘貼代碼時忘了包括宏。我很抱歉。 –

+0

另請閱讀本文:http://devproconnections.com/development/c-sharp-code-writing-tips-eric-lippert-math該文章是關於C#的,但幾乎所有內容也適用於C語言。特別是閱讀本節在整數算術上。 –

回答

2
  1. 喲沒有初始化sum = 0
  2. 如果num1接近極限,sum必然更大。
  3. num1 < num2,所以檢查num1大小是有點沒有意義。
  4. 出於調試目的,在每次循環迭代期間打印num1,num1sum
+0

我不知道你想要說點什麼第2點。 –

+0

#1似乎是問題。當我運行他的代碼時,sum的初始值爲32,767 –