nickse461   2년 전

해당 코드에서 런타임 에러(segfault)가 발생하는데 왜 그런거죠?

artichoke42   2년 전

n[i] 입력받을 때 인자로 &n[i] 내지는 n+i를 넘겨주셔야 할 것 같습니다

artichoke42   2년 전

추가로, 입력으로 들어오는 수가 long long 범위를 초과합니다(__int128 범위를 초과하는지는 잘 모르겠습니다) 따라서 해당 부분을 고치면 '틀렸습니다'를 받게 될 것 같습니다

nickse461   2년 전

정수의 배열 말고 문자열로 새로 코드를 짜봤습니다. 

그런데 질문이 있습니다.

artichoke42   2년 전

현재 코드는 배열 n에 숫자를 문자열로 입력받고, 각 문자를 더하는 동작을 하는 것으로 보입니다.

해당 코드는 숫자 54321이 입력으로 들어왔다 치면, 작성하신 코드는 '5' + '4' + '3' + '2' + '1'울 sum에 담게 되는데, 이때 주의하셔야 할 것은 '5'는 숫자 5를 문자열로 나타냈을 때의 아스키 코드(아스키 코드가 무엇인지 모르신다면 검색해 보시는 것을 권장합니다.) 값이지, 숫자 5 그 자체가 아닙니다. 즉, '5' + '4' + '3' + '2' + '1'을 수행하면 '5'의 아스키 코드 값은 53, '4'는 52, '3'은 51, '2'는 50, '1'은 49이므로, 답으로 255를 출력하는 문제가 발생하게 됩니다.

artichoke42   2년 전

추가로 -'0'을 하면, 각 자리의 아스키 코드를 0의 아스키코드 값으로 빼겠다는 의미인데, 0, 1, ..., 9 의 아스키 코드 값은 모두 0의 아스키 코드 값을 빼주면 원래 숫자 (0, 1, ..., 9)가 나옵니다. 따라서, sum+=n[i]-'0'을 하면 정상적으로 작동하게 됩니다.

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