Brachylog v2, 15 bytes
~+bᵛ⁰↔;"+"zckwᵐ
Very, very inefficient.
Somehow, this manages to use only 6 bytes on what is in most languages the hard part (splitting the number into the form a10b where a is a single digit, in descending order), and a whole 9 bytes for the "join with +
" (which is a builtin in most golfing languages, but not Brachylog).
Unlike most of my Brachylog submissions (which are functions), this one's a full program, taking input from standard input and producing output on standard output.
Explanation
~+bᵛ⁰↔;"+"zckwᵐ
~+ Find an additive partition of the input number
ᵛ such that each component of the partition,
b when the first digit is removed
⁰ is equal to 0;
↔ reverse it,
;"+"z pair every element with "+",
c flatten the resulting list one level,
k remove the last element (i.e. the final "+"),
w and print
ᵐ each remaining element.
(The reason wᵐ
is used rather than the more normal c
is that we're dealing with a heterogenous list – it contains both numbers and strings – and rather than allowing these to mix, it's simplest to just print them all individually.)
The algorithm here brute-forces over all additive partitions of the input until it finds a suitable one (!). Brachylog favours partitioning into fewer possibilities, and with the possibilities sorted in ascending order, so the first solution it will find is the reverse of the solution that the question is asking for. So we just have to reverse it to get the solution we want.