숫자 N을 입력받아 그 수의 일의 자리 숫자를 구한 뒤, 이 숫자를 나누어떨어지게 하는 수, 즉 일의 자리 숫자가 배수가 되는 수들을 화면에 출력하는 C 프로그램을 만들어 보겠습니다.
입력 − N=326
출력 − 일의 자리 숫자는 6이며, 이에 해당하는 수는 2와 3
참고 − 어떤 숫자든 일의 자리는 그 수를 10으로 나눈 나머지를 계산하면 쉽게 구할 수 있습니다. 예를 들어 숫자 N의 일의 자리가 필요하다면 N%10을 사용하면 되고, 이 연산은 N의 일의 자리 숫자를 그대로 반환합니다.
알고리즘
START
Step 1 → 변수 num, num2, i를 선언한다
Step 2 → 숫자 num을 입력받는다
Step 3 → 일의 자리를 구하기 위해 num%10을 num2에 저장한다
Step 4 → num2를 출력한다
Step 5 → 반복문: i=2부터 i<=num2/2까지 ++i
IF num2%i==0
i를 출력한다
End IF
Step 6 → 반복문 종료
STOP
예제 코드
#include<stdio.h>
int main() {
int num, num2, i;
printf("\nenter a number");
scanf("%d", &num);
num2 = num % 10; // 일의 자리 숫자를 num2에 저장
printf("\n unit digit of %d is: %d", num, num2);
for(i = 2; i <= num2/2; ++i) { // 일의 자리 숫자의 절반까지 반복
if(num2 % i == 0) { // 배수 관계 계산
printf("\n multiple of %d is : %d ", num2, i);
}
}
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter a number329 unit digit of 329 is: 9 multiple of 9 is : 3
코드 동작 원리
- 일의 자리 추출:
num % 10연산만으로 입력값의 마지막 자릿수를 간단히 분리할 수 있습니다. - 반복 범위 설정: 일의 자리 숫자 자기 자신을 제외하면, 그 숫자를 나누어떨어지게 하는 수는 절반(num2/2)을 넘을 수 없습니다. 따라서 반복문을 2부터 num2/2까지만 수행하면 충분합니다.
- 나머지 검사:
num2 % i == 0이 참이면 i로 나누어떨어진다는 의미이며, 이때 num2는 i의 배수가 됩니다.
예를 들어 입력값이 329라면 일의 자리는 9이고, 2부터 4까지 검사한 결과 9를 나누어떨어지게 하는 수는 3뿐이므로 "multiple of 9 is : 3" 한 줄만 출력됩니다. 반면 입력값이 326이라면 일의 자리 6에 대해 2와 3이 차례로 출력됩니다.