https://www.acmicpc.net/problem/8595
문자열속에서 숫자만 걸러내어 총합을 출력하는 문제. 그냥 아무생각없이 풀었다가 자꾸 틀렸다고 나와서 당황했다.
틀린 이유는 숫자의 범위인데, 정말 극단적인 상황을 예시로 들어보면, 999999a999999a9999......가 계속되어 제한길이인 5백만자가 들어온다고 가정하자. 이떄 99999는 약 71만번 등장하게 되는데, 999999 * 71만 = 약 7.1천억이므로, int형 범위를 넘어선다. 따라서 int형이 아닌 long long형으로 해결해야한다.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main () {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
char input;
string temp = "";
long long sum = 0;
int t;
cin >> t;
cin.ignore();
while (t--) {
cin >> input;
if (isdigit(input)) {
temp += input;
}
else if (isalpha(input)) {
if (!temp.empty()) {
sum += stoll(temp);
temp = "";
}
else continue;
}
}
if(!temp.empty()) sum += stoll(temp);
cout << sum;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 3613번 C++ 풀이 (3) | 2022.01.04 |
---|---|
백준 9417번 C++ 풀이 (0) | 2022.01.04 |
백준 9093번 C++ 풀이 (0) | 2022.01.02 |
백준 12065번 C++ 풀이 (0) | 2022.01.02 |
백준 5637번 C++ 풀이 (0) | 2022.01.02 |