我在C語言初學者,我旨在對項目歐拉回答問題138。爲您的網站的好處是鏈接:https://projecteuler.net/problem=138項目歐拉138 - C代碼未存儲號碼正確
那麼下面顯示的是我的代碼
#include <stdio.h>
#include <math.h>
unsigned long long L(unsigned long long b);
int main() {
unsigned long long sigma = 0;
int n = 0;
int b = 16;
while (n < 12) {
unsigned long long l = L(b);
if (l != 0) {
n++;
sigma += l;
}
b++;
}
printf("%lld\n", sigma);
}
unsigned long long L(unsigned long long b) {
unsigned long long L = 0;
unsigned long long X1 = 5 * (b * b) + (8 * b) + 4;
unsigned long long x1 = sqrt(X1);
unsigned long long X2 = 5 * (b * b) - (8 * b) + 4;
unsigned long long x2 = sqrt(X2);
if (X1 == x1 * x1 && x1 % 2 == 0) {
L += x1/2;
}
if (X2 == x2 * x2 && x2 % 2 == 0) {
L += x2/2;
}
return L;
}
當問題問的前十二,我設置了循環終止當n = 12,但是這個代碼沒有給出正確的答案。我最初雖然有一個邏輯錯誤,但當我設置循環終止一個n = 2時,程序給出了正確的答案。我懷疑它與存儲在變量中的數字有關,但當然我可能是錯的。
誰能一些線索這是我敢肯定的邏輯是正確的?
一個可能的問題是,['sqrt'](http://en.cppreference.com/w/c/numeric/math/sqrt)是一個浮點功能,所以結果可能會被截斷。並且請儘量避免與'X1'和'x1'這樣密切相關的變量,它們很難區分。 L函數中的函數'L'和局部變量'L' *一樣。 –
那麼有沒有解決這個問題的方法? –
@JohnDoe將所有整數類型更改爲浮點類型。 –