changwonchun   2년 전


질문글을 뒤지면서 문제는 풀긴 풀었는데, 몇 가지 궁금한 점이 있습니다.

1. 제가 알기로 char는 한 글자의 문자열만 저장할 수 있다고 들었습니다. 그런데 어떻게 예제에 나와 있는 54321같은 다섯 글자를 저장할 수 있는 건가요?

2. 또 char는 문자열인데  어떻게 다른 변환처리 없이 바로 14번째 줄에서 int형인 sum과 계산을 할 수 있는지 궁금합니다.

3. 또 예를 들어 n이 5일때 12번째 줄의 for문에서 13번째 줄의 cin입력이  한차례 끝나게 되면 sum값을 구하고 for문을 4번 더 돌아야 합니다. 그러면 4번의 cin 입력이 더 있어야 하는데 왜 입력을 반복하지 않고 16번째 줄의 cout << sum;이 바로 출력되는 건가요?

4. 문제를 보면 입력될 숫자의 개수 N은 1과 100사이이지만 주어지는 숫자의 대한 범위는 나와 있지 않습니다. 그렇다면 제 소스 코드를 보시다시피 만약 n = 5이고 주어지는 숫자가 123066일 경우 컴퓨터가 어떻게 이 숫자가 12 + 3 + 0 + 6 + 6인지, 혹은 1 + 2 + 3 + 0 + 66인지 혹은 다른 조합인지 어떻게 아는 건가요? 계산하는 메커니즘을 보면 주어지는 숫자가 무조건 한 자리일 때만 밑의 코드가 성립하는 것 같은데, 만약 두 자리 이상의 숫자가 들어갈 경우 코드가 어떻게 작동하는지, 그리고 컴퓨터 입장에서 어떤 숫자가 두 자리인지 구분하는지 궁금합니다. 숫자 사이에 공백도 없고 2진수도 아니기 때문에 어떤 식으로 작동하는지 잘 모르겠습니다.

감사합니다.

0000000000   2년 전

(1) char형은 말씀하신 대로 한 글자씩만 저장할 수 있으므로 프로그램은 반복문 한 번당 한 개의 숫자씩만 입력을 받습니다.

(2) char형은 문자열이 아닌 문자입니다. 각 문자는 정수인 ASCII코드(아스키코드) 값을 가지는데요, char형과 int형을 연산할 때는 char형을 그 문자의 ASCII코드 값으로 변환한 뒤 연산을 합니다. 그러므로 별도의 변환 과정 없이도 연산이 가능합니다. 참고로 왜 48이냐면 문자 '0'의 ASCII코드 값이 48이고, '1'은 49, '2'는 50, ...이기 때문입니다.

(3) 아까 (2)에서도 말씀드렸듯이 char형은 문자열이 아닌 문자로, for문을 한 번 돌 때마다 한 문자씩 입력받습니다. 예시 2번을 예로 들어 설명하자면 '5','4','3','2','1' 순으로 각 for문에서 입력을 받습니다. 그러면 당연히 '1'까지 입력이 들어오면 for문이 끝나 출력을 하게 되겠죠.

(4) "숫자"는 0,1,2,3,4,5,6,7,8,9를 의미합니다. 그러므로 저런 식의 입력은 아예 들어올 수 없습니다.

ckdgus2482   2년 전

c++에서는 char를 1바이트 크기의 부호 있는 정수 타입으로 취급하시는 게 좋습니다.

전통적으로 C언어에서부터 문자타입의 변수형은 따로 정의되어있지 않았고, char타입과 int타입의 산술 연산시 char타입 변수는 int타입으로 프로모션 된다는 것이 그 근거입니다.

그리고 따옴표 연산자는 따옴표 안의 문자 하나를 아스키 문자로 해석하여 그에 맞는 아스키 코드 값(정수)를 반환합니다. 즉 'a' 이것은 문자가 아니라 정수입니다.

윗분이 설명하셨듯이 아스키코드표를 보시면 '0'이 48이고 '1', '2', '3' ...이 연속으로 배치되어 있습니다. 따라서 0~9 사이의 문자를 나타내는 수에서 48을 빼면 실제로 그 수가 됩니다. 좀 더 직관적으로 코딩을 하려면 ch - '0'으로 해도 좋습니다.

changwonchun   2년 전

답변 감사드립니다!

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