2012-11-02 4 views
3

저는 프로젝트 저장 장치와 함께 데이터 유형을 사용하도록 강제하는 프로젝트 오일러 문제에 대해 작업 해 왔습니다.printf 변환에 문제가 있습니다 long long

#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; 
} 

프로그램을 컴파일하고 실행하면 숫자로 인쇄되지 않습니다. % ll, % l, 다양한 데이터 형식을 변경했습니다. GNU GCC 컴파일러를 사용하고 있습니다. 어떻게해야합니까?

답변

3

the documentation을 다시 읽어야합니다.

%llll은 완전한 지정자가 아니기 때문에 작동하지 않습니다. 이는 실제 변환 지정자에 대한 수정 자일뿐입니다.

시도 %lld.

+0

나는 그 블록 안에 printf ("Hello")를 원한다고해도 아무 것도 출력하지 않기 때문에 (number % i == 0) 조건에 문제가 있다고 생각한다. 데이터 내부에 크기 제한이있을 수 있습니까? – user1794004

+0

@ user1794004 귀하의 터미널이 될 수도 있습니다. 여기에 인쇄됩니다 (그리고 놀라 울 정도로 불투명합니다). –

2

printf의 올바른 형식은 %lld입니다. 또한이 정수 상수가 너무 커서 long 유형을 유지할 수 없으므로 상수 num에 대한 접두어를 사용해야합니다.

#define num 600851475143LL 

아마도 소문자 매크로의 식별자를 사용하지 않아야합니까?