Помогите доработать код реализации алгоритма

Цель кода: вывести на экран уравнение, котрое приведет к заданому решению (см. input)

Проблема: я не пойму как реализовать, что бы последний знак '+' не добавлялся к выводу.

import Foundation

func mathNumbers(input: Int) -> Array<Int> {
    var arr: Array<Int> = []

    var i = input
    while i > 0 {
        let val = Int.random(in: 1...i)
        i -= val

        arr.append(val)
    }

    return arr
}

func numbersToStr(arr: Array<Int>) -> String {
    var str = ""
    for val in arr {
        str += "\(val) + "
    }

    str += "0"
    return str
}

let input = 123456789
print(numbersToStr(arr: mathNumbers(input: input)), terminator: "")

Ответы (2 шт):

Автор решения: kotleni

Возможно так:

// ...
func numbersToStr(input: Int, arr: Array<Int>) -> String {
    var str = ""
    var test = input // храним значение для проверки
    for val in arr {
        test -= val // отнимаем от значения val
        str += "\(val) "
        if test > 0 { str += " + " } // добавляем плюс только если не край
    }
    
    return str
}

let input = 123456789
print(numbersToStr(input: input, arr: mathNumbers(input: input)), terminator: "")
// ...
→ Ссылка
Автор решения: Roman

Цикл вообще не нужен - у массива есть прекрасный метод joined()

let str = arr.joined(separator: " + ")
→ Ссылка