최대 1 분 소요

숫자 더하기 (백준 11720)

https://www.acmicpc.net/problem/11720

문제의 난이도 자체는 쉬운 편이나
atoi(const char*) 를 사용할때 ‘예제’는 정확히 통과하나,
테스트 중 틀린 부분이 있기에 그에 관련된 내용을 찾아 조사하여 til을 남기려 한다

atoi()에 char 하나의 주소를 넘기는 것은 ‘정의되지 않은 결과’를
초래할 수 있다!

atoi는 인자로 문자’열’을 기대하기에
해당 문자열의 ‘끝’에 ‘널 문자’가 있다고 가정하고 코드가 짜여있음

그렇기에 문자 ‘하나’ 를 넘기는 경우,
‘널 문자’가 없기에 데이터를 어디까지 읽을지를 모르기에
‘정의되지 않은 결과’를 나타낼 수 있다

따라서 ‘0’을 빼준 값을 이용(Ascii)하여 값을 구하면 문제를 해결할 수 있음

Code

#include<iostream>
#include<string>

using namespace std;

int main()
{
	int count = 0;
	int sum = 0;
	string nums;
	cin >> count >>nums;

	for (char a : nums)
	{
		sum += (a - '0');
	}

	cout << sum;

	return 0;
}

댓글남기기