백준 11720번 문제풀이
처음에, 자릿수마다 더하면 되겠다 라고 생각하여
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include<iostream> using namespace std; int main() { int N; int input; int sum = 0; int divide=1; cin >> N; cin >> input; for (int i = 0; i < N-1; i++) { divide *= 10; } for (int i = 0; i <N; i++) { sum += (input / divide); input = input % divide; divide = divide/10; } cout << sum << endl; } | cs |
이렇게 코딩을 진행하였으나, 생각해보니 intput값은 int형으로 정의했고
int형은 -2^(비트수-1) ~ 2^(비트수-1) 사이의 값만 가질 수 있다는 것을 간과했습니다.
2147483647이상의 수가 들어오면 제대로된 연산이 불가능합니다. 그래서 다른 방법을 써야겠다고 생각했습니다.
그 방법은 생각이 나질 않아서
다른 분들이 하신 풀이를 보고 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include<iostream> using namespace std; int main() { int N; int sum = 0; char input; cin >> N; for (int i = 0; i < N; i++) { cin >> input; sum += (input - 48); } cout << sum; } | cs |
정답 코드입니다.
숫자를 하나씩 받기위해서 char형을 사용해주었습니다.
아스키코드 표를 보면 0은 48입니다.
char형으로 숫자를 받아왔기 때문에, 저희가 사용하는 숫자로 나타내려면 -48(-'0')을 해주어야 합니다.
'백준 문제풀이 (C++) > 입출력' 카테고리의 다른 글
[백준 입출력 풀이] 2741번 풀이 c++ (0) | 2020.08.13 |
---|---|
[백준 입출력 풀이] 11721번 C++ (0) | 2020.08.13 |
[백준 입출력 풀이] 11718번, 11719번 C++ (0) | 2020.08.06 |
[백준 입출력 풀이] 11021번 C++ (0) | 2020.08.06 |
[백준 입출력 풀이] 10953번 C++ (0) | 2020.08.06 |