2014-01-08 51 views
0

我試圖解決,使用C,項目歐拉問題3。 我遇到了問題中的大整數的問題 - int和long給我一個「溢出」警告,並且我的程序沒有將結果打印到控制檯。所以我改用了'long long'類型,警告消失了,但控制檯仍然沒有打印答案,這讓我覺得我的代碼中有一個錯誤。程序不打印我的長變量

#include <stdio.h> 

int main() 
{ 
long long largest=0; 
long long div=2; 
long long i = 600851475143; 

while(div<i) 
{ 
    if(i%div == 0) 
    { 
    largest=div; 
    } 
    div++; 
} 
printf("%I64d\n", largest); 
return 0; 
} 

我使用的MinGW作爲該編譯器,在Windows 7

+0

難道不打印任何東西,或做錯事,如果是後者,應該將其打印是什麼呢印刷? –

+0

您是否嘗試過使用雙打? –

+0

這與你的編譯器沒有任何關係(GCC是一個「獨立實現」,這意味着(大致)它沒有標準庫),而是使用你的'libc'(標準庫​​),其中'printf'被定義爲。 – mafso

回答

1

該代碼是OK ..只是它運行時間太長。以下代碼打印出步驟。

while(div<i) 
{ 
    printf("%lld\n",div); 
    if(i%div == 0) 
    { 
    largest=div; 
    } 
    div+=1; 
} 

按算法點我建議你初始化div = 600851475143/2和計數向後

0

嘗試%ll,它會正常工作

printf("%ll\n", largest); 
1

使用%lld打印long long int類型的數據。

printf("%lld\n", largest) 
在格式說明 l

或更改I

+0

mingw將鏈接到win32運行時/ SDK,它將高興地接受%I64d,只有SDK的更新版本知道%lld – nos

+0

@nos;仔細看看,OP沒有使用'l',而是使用'I'。 – haccks

+0

@haacks是的,'%I64d'對於win32是正確的。操作數到600851475143,這將需要_quite_一段時間,所以問題可能是他的循環沒有終止。 – nos

0

請使用%lld作爲格式說明。有關詳細信息,請參閱link

0
#include <stdio.h> 

int main() 
{ 
long long largest=0; 
long long div=2; 
long long i = 600851475143; 

while(div<i) 
{ 
    if(i%div == 0) 
    { 
     largest=div; 
     break;//out of loop 
     printf("%lld\n", largest);//or add this ,I don't think so 
    } 
    div++; 
} 
printf("%lld\n", largest); 
return 0; 
} 

也許這就是你想要的,也許不是......