bangbadak   5년 전

계속 차근차근 봐도 코드는 맞는 것 같은데 출력이 계속 이상하게 나오네요.

뭐가 문젠지 알려주세요.

dyk777   5년 전

  1. sprintf()는 문자들을 char 형태로 출력해줍니다. 예를 들어, a=b=c=1이면, sprintf()한 결과는 d[]={1}이 아니라 d[]={49, 0}입니다.
  2. 위와 같은 이유로, 최대 12글자일 때, 문자열의 맨 끝에 '\0'을 넣기 위해 최소 13자리가 필요합니다.

luniro   5년 전

문제만 해결하려면 13번째 줄을 if( d[i]==j + '0' )로 바꾸시면 될 것 같습니다

다른 개선점으로는 쓸모없는 k의 존재가 있고, 999의 3제곱은 9자리라는 점이 있습니다

만약 더 간결한 코드를 원하신다면 9번째 줄을 for(i = 0; d[ i ] != 0; i++)로 바꾸고, 11-18번째 줄의 for문을 n[ d[ i ] - ' 0 ' ]++; 로 바꾸시는 방법이 있습니다

bangbadak   5년 전

문제 해결은 했는데 왜 13번째 줄에 if( d[i]==j + '0')로 바꾸는데에 있어 왜 + '0'을 넣는 이유가 뭔가요.

실제로 저걸 넣으니까 맞다고는 뜨는데;;

dyk777   5년 전

위의 1번에서 설명을 빼먹었는데, 0~9의 아스키코드는 차례로 48~57입니다.

즉, d[i]가 '1'이라면(정수 1이 아닙니다), ( d[i] - '0' == 1 )일 때 참입니다.

댓글을 작성하려면 로그인해야 합니다.