티스토리 뷰

백준 입출력과 사칙연산 단계 곱셈 2588번 문제입니다.

조금 많이 복잡해서 ㅠㅠ 풀이를 조금 문제를 풀었습니다.

// 입출력과 사칙연산 | 2588번 | 곱셈
#include <iostream>

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

문제의 유형을 보게 되면 처음엔 b의 1자리, 10의 자리, 100의 자릿값을 차례대로 곱하여서 출력해 한다는 것을 알 수 있습니다.

그래서 ten이라는 변수로 모듈러 연산을 하여서 1의 자리, 10의 자리, 100의 자리값을 추출할 수 있습니다.

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

b -= c;

추출한 값을 빼서 다음 연산 때 같이 추출되지 않도록 합니다.

출력할 때 원래대로라면 a*b라는 연산을 하였을 때 2360, 37760, 141600이 출력되어여 합니다.

뒤에 0을 없애야 하므로

std::cout << a * c *10 / ten << std::endl;

*10 / ten를 넣어주어야 합니다.

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

111, 222를 예시로 입력해 보면 됩니다.

 

마지막 출력은 진짜 합을 구해야 하기 때문에 sum에다 a*c값을 그대로 넣어줬고 반목이 끝나게 되면 sum이 출력하여 정답 결과를 볼 수 있습니다.

 

문제를 제대로 풀지 못하였기 때문에 다른 분의 풀이를 참고하였습니다.

풀이 참고 : aorica.tistory.com/16

댓글
댓글쓰기 폼