No posteo código, porque opino que con el concepto basta ^^ En cualquier caso, ahora estoy en el móvil. Para lo que dije, lo primero es sumar cadenas. Eso se hace, como si fuera una suma en papel. "Sumas un número con el otro, y si es mayor de 9, le restas 10, y te llevas una." Y así caracter a caracter, empezando desde la derecha. Cabe decir, que hay que tener cuidado con colocarle un tamaño correcto al char* de salida. (No se vaya a hacer char[-1] o algo del estilo)
*La capacidad de la RAM en este caso no es especialmente relevante.
En cuanto al tema, no necesitas dar X iteraciones para un número X. Basta con poner de tope la raíz cuadrada del número.
Una vez encontrados los divisores inferiores a la raiz cuadrada, los divisores superiores son, siendo el divisor inferior 'N', X/N.
Dado que K*N = X, una vez sacamos un divisor, por ejemplo N, ya tenemos también K.
En caso de que X sea un cuadrado perfecto, X/N==N, por lo que no habría que sumarlo.
En definitiva, esto no es un problema de C++, esto es un problema de algoritmia y matemáticas, quizás fuera más correcto colocarlo en el Foro Libre o en Programación General.