https://www.acmicpc.net/problem/4564
4564번: 숫자 카드놀이
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 숫자 카드놀이의 시작값 S로 이루어져 있다. (1 ≤ S ≤ 100000) S는 0으로 시작하지 않으며, 입력의 마지막 줄에는 0이 하나 주어진
www.acmicpc.net
c++로 백준 4564번 문제를 풀어보겠다.
문제
맨 앞자리에 앉은 상근이는 수업시간이 아무리 지루해도 딴짓을 할 수가 없다. 그런데 오늘은 너무 딴짓이 하고 싶다.
공책에 정인이에게 배운 숫자 카드놀이를 하려고 한다.
숫자 카드놀이를 하려면 먼저 자연수 S를 골라야 한다. 그 다음, 각 자리를 모두 곱하면서 한 자리 수가 나오기 전까지 계속해서 새로운 수를 만드는 게임이다.
예를 들어, 95로 시작한다면, 9 × 5 = 45를 얻게 된다. 45도 두 자리 이상이기 때문에, 4 × 5 = 20를 얻게 된다. 그 다음 2 × 0 = 0 이 되고, 0은 한 자리 숫자이기 때문에 게임은 끝나게 된다.
또, 396에서 시작한다면, 아래와 같은 과정을 거쳐 2로 끝나게 된다.
3 × 9 × 6 = 162
1 × 6 × 2 = 12
1 × 2 = 2
자연수 S가 주어졌을 때, 숫자 카드놀이를 하는 과정을 출력하는 프로그램을 작성하시오.
입력
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 숫자 카드놀이의 시작값 S로 이루어져 있다. (1 ≤ S ≤ 100000) S는 0으로 시작하지 않으며, 입력의 마지막 줄에는 0이 하나 주어진다.
출력
0이 아닌 입력에 대해서, 숫자 카드놀이가 끝나기 전 까지 나온 수를 공백으로 구분하여 출력한다. 첫 값은 입력으로 주어진 값이다.
예제 입력 1 복사
95
396
28
4
40
0
예제 출력 1 복사
95 45 20 0
396 162 12 2
28 16 6
4
40 0
<문제 풀이>
1. while 반복문을 통해 숫자를 문자열형으로 입력받는다.
2. 만약 입력받은 문자열이 0이면 종료하고, 0이 아니면 문자열 값을 출력하고 추가적으로 while문을 반복하며 주어진 문제대로 계산한다.
- 내부 while 반복문 코드 내용 -
만약 입력받은 문자열이 한 자리 수 숫자라면 그냥 종료한다.
for문을 통해 자릿수 순서대로 숫자를 곱한다. (자릿수 중 0이있다면 while문을 종료한다.)
다 곱해 계산한 sum값을 출력한다.
만약 sum값이 0~9사이라면 반복문을 종료한다.
문자열 str에 sum값을 문자 그대로 대입한다.
3. 한 줄을 건너띈 후 처음부터 반복한다.
코드는 다음과 같다.
'C++' 카테고리의 다른 글
[백준 알고리즘] 11948번 : 과목선택, c++ (0) | 2022.03.11 |
---|---|
[백준 알고리즘] 5555번 : 반지, c++ (0) | 2022.03.11 |
[백준 알고리즘] 3047번 : ABC, c++ (0) | 2022.03.10 |
[백준 알고리즘] 6996번 : 애너그램, c++ (0) | 2022.03.09 |
[백준 알고리즘] 7600번 : 문자가 몇갤까, c++ (0) | 2022.03.08 |