C언어

[c++] char 형으로 받은 숫자를 int 로

IT 참다랑어 2020. 12. 18. 21:34

백준 문제 11720번에 대한 이야기.

 

string 형태, 즉 char[] 형의 input 이 주어졌을때 이를 어떻게 숫자로 변환해서 합을 구할것인가

나는 처음에 이 문제를 봤을 때 그냥 (int)문자 쓰면 되는 거 아닌가?하고 생각했다.

그리고 아스키코드를 까맣게 잊고 있었기 때문에 출력이 너무 이상하게 나오고 있었다.

입력은 char 배열에 숫자 하나씩 잘 들어가는데

(int)로 형변환만 해주고 나서 sum 으로 합을 구하니 자꾸 합이 255 가 나왔다.

 

문제는 다음과 같다.

 

입력

첫줄에 정수의 개수 N이 주어진다.

두번째줄에 0≤x≤9인 정수가 N개 주어진다.

ex) 

5
54321

 

출력

입력받은 숫자들의 합을 출력한다

ex)

15

 

그래서 아스키코드를 다시한번 검색해보았다. 아스키코드표를 살펴보면

이재욱님이 만드신 아스키코드표를 가지고 왔다.

아스키코드표를 살펴보면 숫자 0~9는 각각 48~57에 대응된다.

따라서 그냥 (int)를 이용해서 형변환을 할 시 입력받은 5는 53으로 변환되는 것이다.

생각해보니 char는 int형과 덧셈을하면 바로 int형으로 바뀌니까 형변환도 해줄 필요가 없다는 것도 느끼고

코드를 다음과 같이 작성해보았다. 

 

#include <iostream>
using namespace std;

int main() {
	int n = 0, sum = 0; 
	cin >> n; //입력받는 정수의 개수
	char * input = new char[n]; //n을 size로 하는 배열을 만든다.
	cin >> input; //input[0]부터 숫자를 하나씩 집어 넣는다.
	for (int i = 0; i < n; i++) {
		sum +=input[i]-'0'; //input[i]를 하나씩 불러와서 그에 '0'를 빼준다.
                            //0과의 차이만큼만 숫자가 남는다)
	}
	cout << sum;
}

 

'C언어' 카테고리의 다른 글

[c++] while loop에서 EOF(End Of File)이용하기  (0) 2020.12.03