백준 2588번 : 곱셈 문제 풀이
입출력과 사칙연산
https://www.acmicpc.net/problem/2588
이번 문제는 어려워 보이지만 쉽게 생각하면 된다
곱셈이 어떤식으로 이루어지는지만 파악하면 쉽게 풀 수 있다
두 수를 입력받고 자릿수 별로 곱셈한 결과를 출력하면 된다
472 x 385 를 예시로 들면
472 * 5
472 * 8
472 * 3
472 * 385
를 출력하는 문제이다
아래 코드는 두번째 숫자를 각 자릿수 별로 쪼개는 코드이다
int hun_2 = num2 / 100;
int ten_2 = (num2 / 10) - (hun_2 * 10);
int one_2 = num2 - (hun_2 * 100) - (ten_2 * 10);
num2 가 385 라고 하면
hun_2 는 백의 자리이다
385 / 100 을 하면 3.85가 된다
하지만 int 자료형이므로 hun_2 는 3이 된다
ten_2 는 십의 자리이다
385 / 10 은 38.5 가 되고 hun_2 * 10 인 30 을 빼면 8.5
위와 같이 int 자료형이므로 ten_2 는 8이 된다
one_2 는 일의 자리이다
385 에서 300(hun_2 * 100) 과 80(ten_2 * 10) 을 빼면 5
385 - 300 - 80 = 5
one_2 는 5가 된다
이제 첫번째 숫자와 각 자릿수를 곱한 뒤 출력해주면 되는 문제이다
아래는 제출한 코드이다
#include <stdio.h>
int main() {
int num1, num2;
scanf("%d %d", &num1, &num2);
int hun_2 = num2 / 100;
int ten_2 = (num2 / 10) - (hun_2 * 10);
int one_2 = num2 - (hun_2 * 100) - (ten_2 * 10);
printf("%d\n", num1 * one_2);
printf("%d\n", num1 * ten_2);
printf("%d\n", num1 * hun_2);
printf("%d", num1 * num2);
return 0;
}
추가로 다른 사람들의 코드를 확인해보니
% 연산자를 사용해서 코드의 길이를 많이 줄일 수 있는 것을 알았다
num2 가 385 라고 하면
num2 % 10 은
385 를 10 으로 나눈 나머지 5
일의 자리 5 가 계산된다
num2 % 100 / 10 은
385 를 100 으로 나눈 나머지 85
이 값을 다시 10으로 나눈 몫은 8
십의 자리 8 이 계산된다
num2 / 100 은
385 를 100으로 나눈 몫 3
백의 자리 3 이 계산된다
위의 내용을 바탕으로 코드의 길이를 줄이면 첫번째 제출 코드보다 확실히 줄어든 것을 볼 수 있다
#include <stdio.h>
int main() {
int num1, num2;
scanf("%d %d", &num1, &num2);
printf("%d\n", num1 * (num2 % 10));
printf("%d\n", num1 * (num2 % 100 / 10));
printf("%d\n", num1 * (num2 / 100));
printf("%d", num1 * num2);
return 0;
}
'Coding > baekjoon' 카테고리의 다른 글
[baekjoon] 10171번 : 고양이 [C] (0) | 2023.11.16 |
---|---|
[baekjoon] 11382번 : 꼬마 정민 [C] (0) | 2023.11.16 |
[beakjoon] 10430번 : 나머지 [C] (0) | 2023.11.14 |
[baekjoon] 18108번 : 1998년생인 내가 태국에서는 2541년생?! [C] (0) | 2023.11.14 |
[baekjoon] 10926번 : ??! [C] (0) | 2023.11.12 |