#include <iostream>
using namespace std;
int main(void) {
int N;
long long M;
int sum = 0;
cin >> N;
cin >> M;
for (int i = N; i > 0; i--) {
long long num = 1;
for (int j = i-1; j > 0; j--) {
num = num * 10;
}
sum = sum + (M / num);
M = M % num;
if (M == 0)
break;
}
cout << sum;
return 0;
}
위의 코드는 N이 10보다 작은 경우에는 문제 없이 동작하였다.
하지만 N이 10보다 커지는 경우 예상하지 못하는 값이 나왔다.
이러한 문제는 변수 M과 num에 너무 큰 수가 들어가서 런타임 에러 (IntegerOverflow)가 발생한 이유였다.
#include <iostream>
using namespace std;
int main(void) {
int N;
char M;
cin >> N;
int sum = 0;
for (int i = 0; i < N; i++) {
cin >> M;
sum += M - 48;
}
cout << sum;
return 0;
}
1. 제곱이나 자릿수가 큰 경우에 IntegerOverflow가 발생할 수 있다.
2. 자료형의 크기를 벗어나는 경우 예상하지 못한 값이 출력된다.
3. 숫자와 관련된 문제로 보여도 문자열로 풀고 숫자로 변환하는 방식이 더 간단한 경우가 있다.