ericyong95   7년 전

안녕하세요 테스트해봤을 때 값이 제대로 나오지 않아 질문합니다.


저는 이 문제를 10의 n승 값을 이용해 풀어보려고 했습니다.

54321이 있을 때 50000 + 4000 + 300 + 20 + 1인 것을 이용하여

제일 높은 자릿수부터 10의 n제곱을 나누어주어

그 몫이 해당하는 자리의 정수값이 되는 성질을 이용해 풀어보려고 하였습니다.


비주얼 스튜디오에서 제가 테스트해본 예제들은 이상이 없었는데요.

채점 결과 틀렸습니다라고 나와 질문 올려봅니다.


그리고 해당 문제에서 어떤 예제가 테스트로 나오는지 어떻게 알 수 있나요? 틀렸을 때 틀린 이유를 모르겠어서 헤멘 적이 많아서요 ㅠㅠ

읽어주셔서 감사합니다




sgchoi5   7년 전

좀 쉽게 쉽게 처리하는 방식을 생각해보면..

scanf("%1d", 와 같이 하시면 숫자를 한 글자씩 읽어 들일 수 있습니다..

ericyong95   7년 전

오 감사합니다 정말 좋은 방법이에요

thexl   7년 전

코드가 틀린 이유를 말씀드리겠습니다.

int 타입 자료형은 32-bit의 정수형 자료를 저장합니다. 32-bit로는 2^32개의 숫자를 표현할 수 있는데요. 

2^10이 약 1,000정도 라는 것을 생각한다면 int는 약 4,000,000,000가지의 숫자를 표현할 수 있습니다.

여기서 int는 절반 정도는 양수를, 나머지 절반은 음수를 표현합니다. 즉, -2,000,000,000 ~ 2,000,000,000 정도의 숫자 범위만 저장할 수 있습니다.

이 숫자가 표현할 수 있는 자릿수는 9자리입니다. 그런데 문제에서 N이 최대 100일 수 있는데, 100자리 자료를 scanf("%d", &number)라는 명령어로 한 번에 받으려 하기 때문에 에러가 납니다.

Counter case 는 N = 100, Number = 11111111111111111111111111111.....1111111 (1이 100개)가 입력되었을 때 답이 100이 나와야 하는데, 실제론 그렇게 나오지 않을 것입니다.


thexl   7년 전

추가로 나중에 곱셈 등의 연산을 할 때에 int 범위가 넘어가는 경우가 존재하지 않는 지 체크하여 long long type으로 사용해야할 수도 있습니다.

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