코딩/백준 알고리즘

백준 11720-숫자의 합(C언어)

lee1201zxc 2022. 5. 27. 09:46
300x250

문제 링크 : https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

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

www.acmicpc.net

 

문제 

 

 

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

 

 

 

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

 

 

출력

 

입력으로 주어진 숫자 N개의 합을 출력한다.

 

 

예제 입력 1

 

1
1

 

예제 출력 1

 

1

 

해설

 

 

둘째 줄에서 숫자 n개를 공백 없이 받을 때 int형으로 받는다면 n개의 정수가 입력받아지는 것이 아니라 한 개의 정수만 입력받아진다. 물론 이렇게도 풀 수 있지만 조금 더 복잡해질 뿐이다.

그래서 이 문제에선 int형으로 입력받기보단, char형으로 입력받게 코드를 작성하였다.

char형이라도 고유의 숫자 값(아스키코드값)이 존재하기 때문에 계산할 수 있다.

 

코드

#include<stdio.h>
int main(void)
{
	int n,k=0;
	char a;
	scanf("%d", &n);
	getchar();
	for(int i=0; i<n; i++)
	{
		a=getchar();
		k+=a-48;
	}
	printf("%d", k);
}

n은 N(숫자의 개수), k는 숫자 N개의 합을 저장할 변수, a는 숫자들을 char형으로 받을 변수이다.

6행에서 n을 입력받고 난 뒤 7행에서 getchar()을 해주었는데 그 이유는 일단 getchar()는 표준 입력 스트림에서 

문자 하나를 가져오는 것인데 처음에 n을 입력받고 엔터를 치면 엔터가 표준 입력 스트림에 남아 다음에 문자를 입력받을 때 엔터 값이 들어가게 되기 때문이다.(아스키코드값:10) 그래서 7행에서 getchar()을 해주어 표준 입력 스트림에 남아있는 엔터 값을 비워준다. 

그 이후 8행의 for문을 통해 숫자를 입력받고 이 값을 바로 k에 더해주는데 11행에서 k에 a-48을 더해주는 이유는 

아스키 코드값이기 때문이다. 0~9는 아스키코드값 48~57로 원래 숫자보다 48 커지는데 이 때문에 48을 빼주는 것이다.

 

 

728x90

'코딩 > 백준 알고리즘' 카테고리의 다른 글

백준 2753-윤년(C언어)  (0) 2023.12.14
백준 10171-고양이(C언어)  (0) 2023.12.14
백준 1065-한수(C언어)  (0) 2022.05.26
백준 4344- 평균은 넘겠지(C언어)  (0) 2022.05.25
백준 8958- OX퀴즈(C언어)  (0) 2022.05.18