728x90
문제
4564번: 숫자 카드놀이
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 숫자 카드놀이의 시작값 S로 이루어져 있다. (1 ≤ S ≤ 100000) S는 0으로 시작하지 않으며, 입력의 마지막 줄에는 0이 하나 주어진
www.acmicpc.net

풀이
import sys
input = sys.stdin.readline
def multiply_digits(num_str):
result = 1
for digit in num_str:
result *= int(digit)
return result
def card_game(S):
results = [S]
while len(str(S)) > 1:
S = multiply_digits(str(S))
results.append(S)
return results
if __name__ == "__main__":
while True:
S = int(input().strip())
if S == 0:
break
print(" ".join(map(str, card_game(S))))
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
public class Main {
public static int multiplyDigits(String numStr) {
int result = 1;
for (char digit : numStr.toCharArray()) {
result *= Character.getNumericValue(digit);
}
return result;
}
public static ArrayList<Integer> cardGame(int S) {
ArrayList<Integer> results = new ArrayList<>();
results.add(S);
while (String.valueOf(S).length() > 1) {
S = multiplyDigits(String.valueOf(S));
results.add(S);
}
return results;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
int S = Integer.parseInt(br.readLine().trim());
if (S == 0) {
break;
}
ArrayList<Integer> gameResults = cardGame(S);
for (int num : gameResults) {
System.out.print(num + " ");
}
System.out.println();
}
}
}728x90