printf转换麻烦很久

我一直在研究项目的euler问题,它本质上强迫你使用大存储的数据类型。

#include  #include  #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编译器。 我该怎么办?

我想你应该(重新)阅读文档 。

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

尝试%lld

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

 #define num 600851475143LL 

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