이 문제를 풀려면 세 자리 자연수의 1의 자리, 10의 자리, 100의 자리 수를 구하는 방법을 알아야 한다.
예를 들어 세 자리 자연수 123이 있다고 치자.
123의 일의 자리 수는 3이다.
123을 10으로 나누면 몫은 12, 나머지는 3이 된다.
우리가 구하는 수는 나머지와 같음을 알 수 있다.
즉, 123 % 10 을 하면 123의 일의 자리 3을 구할 수 있다.
123의 십의 자리 수는 2이다.
123을 100으로 나누면 몫은 1, 나머지는 23이 된다.
123을 100으로 나눈 나머지 23을 다시 10으로 나누면 몫은 2, 나머지는 3이 된다.
우리가 구하는 수는 몫과 같음을 알 수 있다.
즉, (123 % 100) / 10 을 하면 123의 십의 자리 2를 구할 수 있다.
123의 백의 자리 수는 1이다.
123을 100으로 나누면 몫은 1, 나머지는 23이 된다.
우리가 구하는 수는 몫과 같음을 알 수 있다.
즉, 123 / 100 을 하면 123의 백의 자리 1을 구할 수 있다.
이제 코드를 작성해 보자.
먼저, 세 자리 자연수 2개를 입력받아 변수 a, b 저장한다.
(1)위치에 들어갈 세 자리 자연수는 변수 a에 저장하고,
(2)위치에 들어갈 세 자리 자연수는 변수 b에 저장한다.
(3)에 들어갈 수는 (1)위치의 수와 (2)위치의 수의 일의 자리의 곱이다.
즉, a \* (b % 10)
의 연산 결과이다.
(4)에 들어갈 수는 (1)위치의 수와 (2)위치의 수의 십의 자리 수의 곱이다.
즉, a \* (b % 100 / 10)
의 연산 결과이다.
(5)에 들어갈 수는 (1)위치의 수와 (2)위치의 수의 백의 자리 수의 곱이다.
즉, a \* (b / 100)
의 연산 결과이다.
(6)에 들어갈 수는 (1)위치의 수와 (2)위치의 수의 곱이다.
즉, a \* b
의 연산 결과이다.
실제 (세 자리 수) × (세 자리 수) 연산을 할 때는 아래의 세 수를 더해서 구한다.
(3)위치에 있는 수
(4)위치에 있는 수 뒤에 0을 붙인 수
(5)위치에 있는 수 뒤에 00을 붙인 수
즉, (3)의 수
+ (4)의 수 \* 10
+ (5)의 수 \* 100
을 계산해서 구한다.
따라서, ( a \* (b % 10) ) + (( a \* (b % 100 / 10) ) \* 10) + (( a \* (b / 100) ) \* 100)
으로도 (6)에 들어갈 수를 구할 수 있다.
#include <stdio.h>
int main(void) {
int a, b; // 1. (1)과 (2) 위치에 들어갈 세 자리 자연수를 저장할 변수 2개 선언
scanf("%d %d", &a, &b); // 2. 정수 2개를 입력받아 a와 b에 저장
printf("%d\n", a * (b % 10)); // 3-1. a * (b % 10) 의 결과값 출력
printf("%d\n", a * (b % 100 / 10)); // 3-2. a * (b % 100 / 10) 의 결과값 출력
printf("%d\n", a * (b / 100)); // 3-3. a * (b / 100) 의 결과값 출력
printf("%d\n", a * b); // 3-4. a * b 의 결과값 출력
return 0;
}
'PS > 백준' 카테고리의 다른 글
[백준] 10172번: 개 [C] (0) | 2023.01.02 |
---|---|
[백준] 10171번: 고양이 [C] (0) | 2023.01.02 |
[백준] 10430번: 나머지 [C] (0) | 2023.01.02 |
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 [C] (0) | 2023.01.02 |
[백준] 18108번: 1998년생인 내가 태국에서는 2541년생?! [C] (0) | 2022.12.30 |