작성일 :

문제 링크

4564번 - 숫자 카드놀이

설명

각 입력마다 주어지는 자연수에 대하여,

해당 수가 한 자리 수가 될 때까지 각 자릿수의 수를 곱해 다음 수를 만들어 나가는 과정을 반복하며,

모든 중간 값을 순서대로 출력하는 문제입니다.


접근법

  • 입력으로 주어지는 수 마다, 모든 자릿수를 곱한 값을 구합니다.
  • 곱셈 결과가 한 자리 수가 되기 전까지 위 과정을 반복하며 수열을 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

class Program {
  static void Main() {
    while (true) {
      string s = Console.ReadLine();
      if (s == "0") break;

      while (s.Length > 1) {
        Console.Write(s + " ");
        int prod = 1;
        foreach (char ch in s) {
          if (ch == '0') {
            prod = 0;
            break;
          }
          prod *= ch - '0';
        }
        s = prod.ToString();
      }
      Console.WriteLine(s);
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string num;
  while (cin >> num && num != "0") {
    while (num.size() > 1) {
      cout << num << " ";
      int prod = 1;
      for (char ch : num) {
        if (ch == '0') {
          prod = 0;
          break;
        }
        prod *= ch - '0';
      }
      num = to_string(prod);
    }
    cout << num << "\n";
  }

  return 0;
}