본문 바로가기
C Programming/연습 문제

[C언어 연습문제]강좌 22. Sum of Digits of a Five Digit Number(5자리 숫자 자리 수의 합)

by 희품 2022. 6. 15.
반응형

학습(Study) & 목표(Objective)

모듈러 연산자 % 는 나눗셈의 나머지를 반환합니다. 예를 들어 4 % 3 = 1이고, 12 % 12 = 2가 되는 것이죠. 일반 나누기 연산자 / 는 정수에 대해 수행할 때, 잘린 정수 값을 반환합니다. 예를 들어 5 / 3 = 1이 됩니다. 이런 원리로, 10진법에서 숫자의 마지막 숫자를 얻으려면 10을 모듈로 재수로 사용할 수 있습니다.

 

과제(Task)

5자리 정수가 주어졌을 때, 그 각 숫자의 합을 출력하세요.

 

입력 형식(Input Format)

단일 5자리 정수 n을 입력받습니다.

 

제약 조건(Constraints)

10000 <= n <= 99999

 

출력 형식(Output Format)

다섯 자리 숫자의 각 자릿수의 합을 출력하세요.

 

입력 예제(Sample Input)

10564

 

출력 예제(Sample Output)

16

 

주어진 코드

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	
    int n;
    scanf("%d", &n);
    //Complete the code to calculate the sum of the five digits on n.
    return 0;
}

 

답안 코드

블로그 게시글 순서 기준으로, 문제 순서가 잘못되어 난이도가 낮은 문제가 뒤늦게 나왔습니다. 이미 쉽게 하실 수 있는 분들은 복습 차원에서 한 번 풀어보세요.

 

모듈러 연산자(%)는 이 문제를 해결하는데 유용합니다. 임의의 숫자를 10으로 모듈러 연산(%)하면, (n % 10) 그 숫자의 첫 번째 자릿수를 알 수 있습니다. 그런 다음에 그 숫자를 10으로 나누면 숫자에서 단위의 자릿수가 제거됩니다. 이 과정을 반복하면 각 자리 숫자를 알 수 있고, 각 자리의 숫자를 더할 수 있습니다.

 

여기서는 do.. while문을 사용하여 문제를 해결하였습니다. do.. while문은 do 부분에 있는 명령문이 한 번 이상 실행되고 그 후에 while의 조건을 검사하기 때문에 최소한 한 번 이상 실행되는 반복문입니다.

 

모든 주어진 숫자의 합을 찾는 것이 문제이기 때문에, while 문의 조건 설정은  number != 0으로 설정하면 됩니다. 숫자가 0이 되기 전에 계속 반복문을 실행하여 자릿수를 줄여나가는 것이죠. 이렇게 하면, 5자리가 아닌, 6자리, 7자리의 숫자를 더할 때도 똑같이 적용이 가능합니다.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
   
/*
    int i = 0;
*/
    int n = 0;
    scanf("%d", &n);
    //Complete the code to calculate the sum of the five digits on n.
    int sum = 0;
    do {
        sum += (n % 10);
        n /= 10;
    }while(n != 0);

// 자릿수가 주어져있기 때문에 5번 반복문을 돌려도 크게 상관은 없다.
// 0보다 큰 수를 입력받는 조건이기 때문에 그냥 while(n > 0)문을 사용하여도 상관 없다.
/*
    for(i = 0; i < 5; i++)
    {
        sum += n % 10;
        n /= 10;
    }
*/
    printf("%d", sum);
    return 0;
}

 

추가 답안 코드

자릿수가 정해져 있기 때문에 시도해볼 수 있는 다른 방법이 있습니다.

어차피 5자리 정수만 입력받는다면? 5글자를 각각 문자로 입력받고, ASCII 코드 번호를 빼서 숫자로 바꾼 다음 더하는 것이죠.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	
    int n;
    //scanf("%d", &n);
    //Complete the code to calculate the sum of the five digits on n.
    
    scanf("%c%c%c%c%c", &a,&b,&c,&d,&e);
    printf("%d\n",(a-48)+(b-48)+(c-48)+(d-48)+(e-48));
    
    return 0;
}

 

 

 

반응형