초보 개발자의 이야기, 릿허브

[C++] 백준 2588번 곱셈 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 2588번 곱셈

릿99 2021. 12. 15. 09:32
728x90
반응형
1. 문제이해

https://www.acmicpc.net/problem/2588

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

 

위와 같은 방식으로 세 자리 자연수의 곱을 구할 때,

(3), (4), (5), (6) 의 위치에 들어갈 값을 구하는 것이 목표이다.

 

 

 

2. 문제풀이

 

상당히 쉬운 난이도의 문제이다.

사실 단계별로 풀어보기 포스팅도 하고 있는데, 어느정도 문제풀이가 필요할 것 같아서 쓰는건 비밀

(3), (4), (5), (6) 의 위치에 들어갈 값을 구하는 것이 목표인데,

(3)의 경우 (2)의 의자리 숫자와 (1)의 곱

(4)의 경우 (2)의 의자리 숫자와 (1)의 곱

(5)의 경우 (2)의 의자리 숫자와 (1)의 곱

(6)의 경우 (2)와 (1)의 곱

과 같다.

 

for문이나 while문을 통해 (2)의 일, 십, 백의 자리를 차례대로 구해주고,

해당 자릿수와 (1)의 곱을 출력, 마지막으로 (1)과 (2)의 곱을 출력해주면 된다.

소스코드는 아래와 같다.

 

 

 

3. 소스코드
#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int num1, num2;
	int copy_num2;      // 값을 복사해두기 위한 변수
	int remainder = 0;  // 일, 십, 백의 자리를 저장하는 변수

	cin >> num1 >> num2;

	// 아래 for문을 통해 num2 값이 변화하므로, 값을 복사
	copy_num2 = num2;
	for (int i = 1; i <= 3; i++) {
		remainder = num2 % 10;   // 10으로 나눈 나머지 -> 해당 자리수
		cout << num1 * remainder << "\n";
		num2 = num2 / 10;        // 10으로 나누고, 다음 자리수를 구하도록 함
	}

	cout << num1 * copy_num2 << "\n";

	return 0;
}

num1, num2, copy_num2, remainder 변수를 선언한다.

각각 문제의 (1), (2), (2)의 값을 복사해두는 변수, (2)의 각 자릿수를 저장하는 변수이다.

 

(1)과 (2)의 값을 입력받은 뒤, 아래 for문을 통해 num2 값이 변화하므로,

미리 copy_num2 변수에 num2 값을 복사해둔다.

이후 for문을 통해 각 자릿수를 remainder에 저장, 해당 값과 num1 값의 곱을 구해 차례로 출력한다.

(i = 1의 경우, num2 % 10은 num2의 일의자리 숫자가 나오게 되고,

num2의 일의자리 숫자와 num1의 곱을 출력하게 된다.

이후 num2 값을 10으로 나누어주어 백의자리가 십의자리, 십의자리가 일의자리가 되도록 만들어준 뒤

위 과정을 반복한다. )

 

마지막으로, copu_num2에 복사해둔 num2 값과 num1 값의 곱을 출력해준다.

 

 


 

 

 

 

 

728x90
반응형