C언어 숫자의 합

C언어 숫자의 합


이번에는 처음에 5를 입력하면 5개의 숫자를 입력받아서 그 숫자 합을 알아내는 것을 알아볼거다.

예를 들어보자.


입력받는 값은 1 <= n <= 100 까지로 설정하자.


 input : 5

          54321

 output : 15 

 input : 25

         7000000000000000000000000

 output : 7

 input : 11

         10987654321

 output : 46


이러한 문제가 있다.


근데 scanf로 받을 시에 엔터키를 눌러서 다음 줄로 이동이 된다.

이 문제는 그렇게 하면 안 된다. 공백이 있거나 다음 줄로 이동하면 안 된다.

그러면 어떻게 해야 될까? 문자열로 입력을 받아서 문자열을 하나하나 쪼개줘야 한다.

문자열로 입력받으면 ASCII 코드를 이용해보자.


아스키코드표를 보면 문자 '0'이 48 값이다.

그럼 문자열을 하나하나 쪼개서 48을 빼주고 값을 더해주면 된다.


코드를 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
main() {
    int n, result = 0;
    char input[101= { 0, };
 
    scanf_s("%d"&n);
    scanf_s("%s", input, sizeof(input));
 
    for (int i = 0; i < n; i++)
        result += input[i] - 48;
 
    printf("%d\n", result);
}
cs

코드는 이렇게 된다. 코드 설명을 해보자면

6
7
scanf_s("%d"&n);
scanf_s("%s", input, sizeof(input));
cs

문자열을 입력받아서 접근을 해줄 거이니 문자열을 입력받고 몇 번째 배열까지 접근을 할 것인지 n을 입력받아준다.

9
10
for (int i = 0; i < n; i++)
    result += input[i] - 48;
cs

반복문을 n 만큼 돌려주고 문자를 ASCII 코드로 변환해주면 '0'은 48이란 것을 알게 된다.
숫자로 표현을 하려면 48을 빼주면 된다. 문자 5가 입력됐으면 ASCII로는 53이 된다. 문자를 숫자로 표현하려면 48을 빼주면 숫자로 나온다.
이렇게 풀어주면 된다.
알고리즘은 그냥 내 생각에는 " 너의 모든 것을 활용해서 X대로 만들어봐라 " 이거인 거 같다.
대신, 메모리를 적게 사용하고 빠르게 만들면 더욱더 좋다.

댓글

Designed by JB FACTORY