본문 바로가기
Programming/C++ - 백준

[백준] 11720번 : 숫자의 합 | 아스키코드 (C++)

by 지구코드 2023. 4. 11.
반응형


문제


풀이

 ① 나머지와 나누기를 이용해, 각 자리 수를 더하는 방법

 

#include <iostream>
#include <string>
using namespace std;

int main() {
	int N;
	int a, answer=0;

	cin >> N;
	cin >> a;

	for (int i = 0; i < N; i++) {
		answer += a % 10;
		a /= 10;
	}

	cout << answer << endl;
}

 

→ int의 범위가 –2,147,483,648 ~ 2,147,483,647이기 때문에, 테스트 케이스 3에서 입력값이 커 오류가 발생함.

 

	int N;
	long long a, answer=0;

 

→ 범위가 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807인 long long으로 고치니 대략 10자리의 값은 해결이 되었지만, 여전히 25자리인 테스트 케이스 3에서 오류가 발생함. 

 

int / long long

 범위가 0 ~ 18,446,744,073,709,551,615인 unsigned long으로 고쳐보았지만, 같은 오류가 발생해 아스키 코드를 사용하는 방법으로 문제를 해결함.


 ② 아스키 코드를 이용해 합계를 구하는 방법

string으로 입력받은 후, int형으로 변환해주기 위해 -'0'을 한다.

→ 문자열 '0'의 아스키 코드는 48이므로, int로 변환하기 위해서는 -'0' 또는 -48을 해준다.


코드 

#include <iostream>
#include <string>
using namespace std;

int main() {
	int N, answer = 0;
	string str;
	cin >> N;
	cin >> str;

	for (int i = 0; i < N; i++) {
		answer += str[i] - '0';
	}
	cout << answer << endl;

}

개념 

- 아스키 코드(ASCII): 0부터 127까지의 숫자를 이용해 문자를 표현한다. '0'의 값은 아스키 코드값으로 48이며, '1'은 아스키 코드값으로 49이다. 이렇게 1씩 증가하며 문자가 나열된다. 따라서, string형으로 입력 받은 숫자를 int형으로 변환하기 위해서는 '0'을 빼거나, 48을 빼면 된다.

 

아스키 코드표(ASCII Table)


결과

 

 

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

반응형

댓글