[210121][백준/BOJ] 11720번 숫자의 합

KeonWoo Kim·2021년 1월 21일
0

알고리즘

목록 보기
1/84

문제

입출력


풀이

아스키코드값을 이용해서 푸는 문제다.
아스키코드표를 보면 숫자 0부터 9까지가 48부터 57까지인것을 알 수 있다.
예를들어 문자로 숫자 5를 입력받으면 53가 되므로 48('0')을 빼주면 원하는 값을 받을수 있다.

코드

#include <iostream>
using namespace std;

int main() {
	int n, sum = 0;
	char c;

	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> c;
		sum += c - 48;
	}
	cout << sum << endl;
}

http://www.asciitable.com/


비슷한 문제

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만
듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “t0e0a1c2her”에서 숫자만 추출하면 0, 0, 1, 2이고 이것을 자연수를 만들면 12가 됩니
다. 즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 12를 출력하고, 다음 줄에 12의 약
수의 개수를 출력하면 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

▣ 입력설명
첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.
▣ 출력설명
첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.

▣ 입력예제 1
g0en2Ts8eSoft

▣ 출력예제 1
28
6

풀이

문자열 사이에서 숫자만 찾은다음에 숫자를 합쳐서 출력하고 합친 숫자의 약수의 개수를 출력할 수 있다.
아스키코드 값이 48에서 57 사이라면 숫자임을 알 수 있다.

위 과정을 통해 문자열안에 0 0 1 2라는 숫자가 있음을 알 수 있으며 이를 12로 만들기 위해서는
총합에 곱하기 10을 하면서 각 값을 더해주는 과정을 반복하면 된다.

		  sum = sum * 10 + (c[i] - 48);
		  0 0 1 2 -> 
		  0 * 10 + 0 = 0
		  0 * 10 + 0 = 0
		  0 * 10 + 1 = 1
		  1 * 10 + 2 = 12	

코드

#include <iostream>
using namespace std;

int main()
{
	char c[50];
	int sum = 0;
	int cnt = 0;

	cin >> c;

	for (int i = 0; c[i] != '\0'; i++) // 문자열이기때문에 널문자 전까지 반복문실행
	{
		// 0  1  2  3  4  5  6  7  8  9
		// 48 49 50 51 52 53 54 55 56 57
		if (c[i] >= 48 && c[i] <= 57)
		{
			// 0 0 1 2 -> 
			// 0*10 + 0 = 0
			// 0*10 + 0 = 0
			// 0*10 + 1 = 1
			// 1*10 + 2  = 12	
			sum = sum * 10 + (c[i] - 48);
		}
	}
	for (int j = 1; j <= sum; j++)
	{
		if (sum % j == 0)
			cnt++;
	}

	cout << sum << endl;
	cout << cnt << endl;
}
profile
안녕하세요

0개의 댓글

관련 채용 정보