학습(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;
}
'C Programming > 연습 문제' 카테고리의 다른 글
[C언어 연습문제]강좌 21. Boxes through a Tunnel(터널을 통과하는 박스 - 구조체 기본) (0) | 2020.06.07 |
---|---|
[C언어 연습문제]강좌 20. Querying the Document(문자열 분해 - 문단, 문장, 단어 조작) (0) | 2020.04.23 |
[C언어 연습문제]강좌 19. Variadic functions in C(가변인자 함수 구현법) (0) | 2019.05.17 |
[C언어 연습문제]강좌 18. Permutations of Strings(문자열 순열 표시 - next_permutation 직접 구현) (0) | 2019.05.14 |
[C언어 연습문제]강좌 17. Sorting Array of Strings(함수포인터 활용) (0) | 2019.05.06 |