Коротко:
const add = (str, num, saveLength) =>
`${+str + num}`.padStart(str.length, 0).slice(-str.length * !!saveLength);
Длинно:
function add(str, num, saveLength) {
const result = [];
let overflow = 0;
let i = str.length - 1;
while (saveLength ? i >= 0 : (overflow || num || i >= 0)) {
const d = (str[i] | 0) + (num % 10) + overflow;
result.push(d % 10);
overflow = +(d > 9);
num = num / 10 | 0;
i--;
}
return result.reverse().join('');
}
Примеры использования:
add('0001', 1) // '0002'
add('000099', 901) // '001000'
add('05', 99) // '104'
add('05', 99, true) // '04'