-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;
}
당신이 당신의 프로그램을 디버깅하려고 했습니까? 도움말 센터의 링크 : [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). – usr2564301
digits1은 절대 0이 아니어야 첫 번째 내부 루프를 무한대로 만들 수 있습니다. 0으로 나눌 수 없으므로 두 숫자를 나눌 경우 0이되지 않습니다. 분명히 "x"가 10보다 작 으면 digits1은 0이어야합니다. – superultranova
경고가 활성화 된 (및 실행 된) 프로그램을 컴파일해야합니다. 'x'는 두 번 선언됩니다. 범위 내에서 컴파일러가 허용하는 경우에도 동일한 함수에서 같은 이름의 두 개의 다른 변수를 사용하는 것은 좋지 않습니다. 초기화되지 않은 변수가 있으며,'scanf()'가'% c' 타입으로 무엇을하는지 연구해야합니다. 배열을 채우지 않습니다. –