728x90
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int a, sum = 0;
    scanf_s("%d", &a);
    char* num = (char*)malloc(sizeof(char) * a);
    for (int i=a; i >= 0; i--) {
        scanf_s("%c", &num[i]);
    }
    for (int i = a - 1; i >= 0; i--) {
        sum += (int)num[i] - 48;
    }
    printf("%d", sum);
}

이 문제는 솔직히 100%이해를 하지 못했다.

일단 아는데까지 정래해보다 보면 무언가 알게되겠지

일단 숫자 입력받는 것은 쉬우니까

그리고 메모리 할당을 해주더라??

문자열로 변환시켜서 배열넣어서 그런듯

그 다음에는 거꾸로 배열을 저장시키던데...

이 이유는 모르겠지만 반대로 하면 다른 값이 나온다.

그러므로 거꾸로 할 수 밖에 없을 것 같고....

 

배열로 저장해야 차례대로 더해주기가 쉬우니까

그리고 a-1을 해서 다시 for문이 들어간다.

이유는 모르겠지만 같이 a-1을 하면 -24가 나오니

똑바로 나오기 위해 그런듯??

 

그리고 sum해주면서 -48을 한다.

문자열인 아스키코드는 기존 숫자에 +48을 해주니

정수형을 위해 빼주는 것으로 보인다.

 

그리고 합을 출력하면된다.

다시 한번 풀어봐야 할 것 같다.

몇가지 이해 안 되는 부분이 존재한다.

 

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

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

www.acmicpc.net

 

728x90

+ Recent posts