2019. 6. 26. 12:46ㆍ알고리즘/백준
문제
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
(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
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9498번 시험 성적 C++ 문제 풀이 if문 (0) | 2019.06.28 |
---|---|
[백준] 1330번 두 수 비교하기 C++ 문제 풀이 if문 (0) | 2019.06.28 |
[백준] 10171번 고양이 C++ 문제 풀이 입출력과 사칙연산 (0) | 2019.06.25 |
[백준] 10869번 사칙연산 C++ 문제 풀이 입출력과 사칙연산 (0) | 2019.06.24 |
[백준] 1008번 A/B C++ 문제 풀이 입출력과 사칙연산 (2) | 2019.06.19 |