티스토리 뷰

숫자의 합

문제

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

입력

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

출력

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

예제 입력 1

1
1

예제 출력 1

1

예제 입력 2

5
54321

예제 출력 2

15

예제 입력 3

25
7000000000000000000000000

예제 출력 3

7

예제 입력 4

11
10987654321

예제 출력 4

46

해설

첫 번째 코드가 채점을 통과하지 못해서 짜증이 나는 문제다. 처리를 위해서 문자열을 숫자로 변환해 주는 함수인 atoi()를 이용하여 짜 코드인데 정확힌 출력되는데도 채점을 통과하지 못했다. 이 코드를 이래저래 바꾸어 보아도 틀렸습니다.런타임 에러라는 결과를 얻을 뿐이다. 아…. 좀 빡쳐. 이 코드에 어디가 문제인지 알려주면 좋겠다!

첩경을 찾지 말라는 의미로 받아들이고 atoi()를 사용하지 않는 코드를 짰다. 아스키코드에서 문자와 숫자의 차이를 이해하면 간단한 연산을 통해 아라비아 문자를 아라비아 숫자로 변환할 수 있다.

아스키코드

위 표를 보면 아라비아 문자의 십진 코드가 48에서 시작한다. 아라비아 문자 0이 48인 것이다. 즉 문자코드값 48에서 48을 빼면 곧 수 0을 얻을 수 있는 것이다. 그 다음의 아라비아 문자들 역시 48을 빼면 곧 문자가 아닌 수로 변환이 되는 것이다. 이런 성질을 이용하여 문자열로 받은 각 아라비아 문자의 합을 다음의 코드로 구할 수 있다.

    for (i = 0; i < times; ++i) {
        sum += num[i] - 48;
    }

이를 이용하여 소스코드 2를 작성하였고 이 코드는 채점에 통과하였다.

소스코드 1 : C

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int i, times, sum = 0;
    char cNum[100];
    char *pchar;

    scanf("%d", &times);
    scanf("%s", cNum);

    for (i = 0; i < times; ++i) {
        *pchar = cNum[i];
        sum += atoi(pchar);
    }
    printf("%d\n", sum);
    return 0;
}

소스코드 2: C

#include <stdio.h>
int main(int argc, char *argv[])
{
    int times, i, sum = 0;
    char num[100];
    scanf("%d", &times);
    scanf("%s", num);

    for (i = 0; i < times; ++i) {
        sum += num[i] - 48;
    }

    printf("%d\n", sum);
    return 0;
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함
11-26 00:00