백준 문제 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 |
---|