# 문제
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
# 풀이
공백없이 적힌 숫자를 하나씩 받아오려면? 문자열을 사용하면 된다.
아주 간단한 문제! 바로 정답 소스코드를 확인해보자.
#include <iostream>
using namespace std;
int main(){
int t;
int sum = 0;
string num;
cin >> t >> num;
for(int i=0; i<t; i++){
sum += (num[i] - '0');
}
cout << sum;
return 0;
}
숫자의 개수를 담을 t, 합을 계산해줄 sum 변수를 정수형으로
문자를 받아줄 num 변수를 문자열로 선언해주면 준비 끝!
그 후엔 매번 하던대로 입력을 받아 계산해 출력해주면 되는데 잠시 문제가 있다.
바로 숫자를 문자열로 입력받았기 때문에 한 자리씩 떼어도 숫자 연산이 불가능하다는 것이다.
간단하게 코드를 짜 확인해보면 한자리씩 떼어낸 숫자가 모두 char형인 것을 확인할 수 있다.
이때는 int형으로 변환해 계산하면 되는데 여기서는 아스키코드 연산을 활용해 계산해주었다.
for(int i=0; i<t; i++){
sum += (num[i] - '0');
}
'0' - '0'은 아스키 코드 값으로 48 - 48 = 0
'1' - '0'은 아스키 코드 값으로 49 - 48 = 1
'2' - '0'은 아스키 코드 값으로 50 - 48 = 2
...
'9' - '0'은 아스키 코드 값으로 57 - 48 = 9
하지만 이때 '0'~'9'과의 연산에서만 원하는 결과가 나올 수 있음에 유의하자.
만약 '0'~'9'가 아닌 다른 문자가 올 경우 아스키 연산을 통해 원하지 않던/예상치 못한 값이 나올 수 있다.
연산을 마친 후엔 구해둔 sum을 출력해주면 끝!
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 11718번: 그대로 출력하기 | C++ 풀이 (0) | 2023.05.19 |
---|---|
[백준] 5622번: 다이얼 | C++ 풀이 (0) | 2023.05.18 |
[백준] 1546번: 평균 | C++ 풀이 (0) | 2023.05.16 |
[백준] 10811번: 바구니 뒤집기 | C++ 풀이 (0) | 2023.05.14 |
[백준] 3052번: 나머지 | C++ 풀이 (0) | 2023.05.13 |