2014-12-26 8 views
-3

정수 N을 입력합니다.이 숫자의 숫자를 정확히 나눈 값을 찾습니다. N은 시간 초과 또는 CPU로 인해 종료되었습니다. 제한 시간을 초과했습니다 (코어 덤프 됨). 여기 내 코드는 enter code here배열을 long int로 변환하고 배열로 다시 변환하는 방법

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() 
{ 

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
    int T, cnt, digits1, digits2, rem; 
    long long x; 
    char N[11]; 

    scanf("%d", &T); 

    for (int i = 1; i <= T; i++) 
    { 
     scanf("%10c", N); 
     int x = (atoll(N)); 
     digits1 = x; 
     while (digits1 != 0) 
     { 
      digits1 = x/10; 
      cnt++; 
     } 
     // char buffer[cnt + 1]; 
     for(int j = 1; j <= cnt; j++) 
     { 
      rem = x % N[j]; 
      if (rem == 0) 
      { 
       digits2++;  
      } 
     }    
     printf("%d", digits2); 
    } 
    return 0; 
} 
+1

당신이 당신의 프로그램을 디버깅하려고 했습니까? 도움말 센터의 링크 : [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). – usr2564301

+0

digits1은 절대 0이 아니어야 첫 번째 내부 루프를 무한대로 만들 수 있습니다. 0으로 나눌 수 없으므로 두 숫자를 나눌 경우 0이되지 않습니다. 분명히 "x"가 10보다 작 으면 digits1은 0이어야합니다. – superultranova

+1

경고가 활성화 된 (및 실행 된) 프로그램을 컴파일해야합니다. 'x'는 두 번 선언됩니다. 범위 내에서 컴파일러가 허용하는 경우에도 동일한 함수에서 같은 이름의 두 개의 다른 변수를 사용하는 것은 좋지 않습니다. 초기화되지 않은 변수가 있으며,'scanf()'가'% c' 타입으로 무엇을하는지 연구해야합니다. 배열을 채우지 않습니다. –

답변

0

이것은 숙제와 같습니다.

몇 가지 정보를 알려 드리겠습니다. 당신이 실제 int 또는 long (또는 귀하의 경우 long long)로 변환 입력 문자가 있으면

, 숫자 주위에 깨끗이하지 않는다 - 특히베이스 (10)에 당신은 당신이 할 수있다 그 같은 아무것도 할 거라면 또한 char 배열 형식으로 두십시오. 이 비트는 필요하지 않습니다.

while (digits1 != 0) 
{ 
    digits1 = x/10; 
    cnt++; 
} 

초기화되지 않은 값이 있습니다. 모든 것이 자동으로 0으로 초기화된다고 가정하지 마십시오. 가끔 운이 좋으면 ...하지만 종종 그렇지 않을 수도 있습니다.

이 좋아 보인다 :

for(int j = 1; j <= cnt; j++) 
{ 
    rem = x % N[j]; //not quite right N is ASCII 
    if (rem == 0) 
    { 
     digits2++;  
    } 
} 
관련 문제