2012-11-02 39 views
3

我一直在处理一个euler问题,它本质上强迫你使用具有大存储的数据类型。printf转换问题很长

#include <stdio.h> 
#include <conio.h> 
#define num 600851475143 

int main() 
{ 
long long i, j, count=0, number=num, k; 
for(i=2;number!=1;i++) 
{ 
    count=0; 
    for(j=1;j<=i;j++) 
    { 
     if((i%j)==0) 
     { 
      count++; 
     } 
    } 
    for(k=0;k<100000000;k++) 
    {} 
    if(count==2) 
    { 
     printf("      %d\n", i); 
     if(number%i==0) 
     { 
      number/=i; 
      printf("  %d\n", number); 
      printf("%d\n", i); 
      i=2; 
     } 
    } 
} 
getch(); 
return 0; 
} 

当我编译并运行该程序时,没有打印任何号码。我尝试了各种printf转换%ll,%l,我已经改变了数据类型。我正在使用GNU GCC编译器。我该怎么办?

回答

3

你应该(重新)阅读the documentation,我猜。

%ll没有工作,因为ll不是一个完整的说明符,它只是实际转换说明符的修饰符,它应该遵循。

尝试%lld

+0

我相信这是在条件的问题,如果(编号%我== 0),因为它不打印,即使我想给printf(“你好”)的块中任何东西。是否有可能对数据里面有大小限制? – user1794004

+0

@ user1794004可能是您的终端,它在这里打印(并且整体上令人惊讶的是不起作用)。 –

2

printf正确格式为%lld。此外,您应该为常量num使用前缀,因为此整数常量太大而无法在long类型中保留。

#define num 600851475143LL 

也许你应该避免小写宏的标识符?