[백준] 2588번 곱셈 C++ 문제 풀이 입출력과 사칙연산

2019. 6. 26. 12:46알고리즘/백준

728x90
반응형

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력

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


예제 입력 1

472

385


예제 출력 1

2360

3776

1416

181720


문제 풀이

#include <iostream>
using namespace std;

int main(void){
	int a, b, c = -1, sum = 0;
	int ten = 10;
    
	cin >> a >> b;
    
	for(int i = 0; i < 3; i++) {
		c = b % ten;
        
		cout << a * c * 10 /ten << endl;
        
        sum += a * c;
		b -= c;
		ten *= 10;
	}
	cout << sum;
}

문제의 유형을 보면 처음엔 b의 1의 자리, 10의 자리, 100의 자릿값을 차례로 곱하여 출력해야 하는 것을 알 수 있습니다.  그래서 ten이라는 변수로 모듈러 연산을 하여 1의 자리, 10의 자리, 100의 자릿값을 추출할 수 있게 하였습니다. 

십의 자리 숫자를 추출할 때는 일의 자리 숫자도 같이 나오게 되므로 일의 자리 숫자를 0으로 만들어 주기 위해

b -= c; //추출한 값을 빼서 다음 연산 때 같이 추출되지 않도록 한다.

코드를 삽입했습니다.

 

출력할 때 원래대로라면 a*c 연산을 했을 때 2360, 37760, 141600이 출력돼야 하는데 뒤에 0을 없애야 하므로

cout << a * c *10 / ten << endl; // *10 / ten 추가.

을 넣어줬습니다.

참고로 연산의 순서를 바꿔  /ten*10으로 하면 끝의 자리수가 잘렸다가 10이 곱해져서 0으로 채워질 겁니다.

111,222를 예시로 입력해보세요.

 

마지막 출력은 진짜 합을 구해야 하기 때문에 sum에다 a*c 값을 그대로 넣어줬고

반복문이 끝나면 sum을 출력하여 정답 결과를 볼 수 있습니다.

 

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

 

2588번: 곱셈

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

www.acmicpc.net

 

728x90
반응형