Codeforces Round #640 (Div. 4) A – Sum of Round Numbers を解いた記録

問題の概要

正の整数\(n\)が\(t\)個与えられる.
それぞれの\(n\)に対して,\(n\)を「切りのいい数」(10進数表記で一番左の数字以外のすべての数字が0である数)の和の形にして出力せよ.
ただし,和の形で表すときに項数が最小となるようにせよ.

問題へのリンク

制約

  • \(1 \leq t \leq 10^{4}\)
  • \(1 \leq n \leq 10^{4}\)
  • 入力はすべて整数

解法

「切りのいい数」は,(1以上9以下の整数)×(10のべき乗)の形で表されます.例えば\(800\)は\(8 \times 10^3 \), \(7\)は\(7 \times 10^0\)です.
1桁の整数(1から9)も「切りのいい数」です.
どのような正の整数も,いくつかの「切りのいい数」の和で表せます.例えば\(9876\)は\(9 \times 10^3 + 8 \times 10^2 + 7 \times 10^1 + 6 \times 10^0\)です.

やるべき操作は次の通りです.

  • 与えられる数字\(n\)から0でない桁を取り出す
  • 取り出したそれぞれの数字に対して,適切な数(10のべき乗)をかける
  • 項数と各項を出力する

実装例