Pelo que entendi, no final sempre vai sobrar um número menor que 10, né?
Se for isso mesmo, acho que tenho uma solução.
O primeiro passo é não tentar converter string pra números e vice-versa. Vamos trabalhar apenas com números.
O segredo pra isso funcionar vai ser o seguinte:
-
Dividimos o número por 10, porém pegamos apenas a parte que sobrou usando o operador %. Essa sobra será acumulada num variável temporária.
-
Dividimos o número mais uma vez por 10, mas dessa vez guardamos o resultado normal. Esse resultado vai ser usado na próxima iteração do loop.
Bom, fiz o código abaixo pra demonstrar. Não fiz muitos testes, mas espero que sirva, pelo menos, pra demonstrar um forma alternativa de decompor um número inteiro.
Também não usei scanf, inseri o número direto no código. Essa parte vc já sabe, só lembre-se de usar o %d pra pegar um inteiro ao invés do %s.
#include <stdio.h>
int main(void) {
int num = 4096;
while(num > 9) {
int temp = 0;
while(num > 0) {
temp = temp + num % 10;
num = num / 10;
printf("%6d %6d\n", num, temp);
}
num = temp;
puts("---------------");
}
printf("result: %d\n", num);
return 0;
}