Тема: Перестановка цифр у числі
Читаю Прата "Мова програмування С". Розділ функції. Задача, яка дана у книжці звелась, до пошуку протилежного числа.
Задача:
Вводиться ціле число з клавіатури. Програма повинна вивести протилежне число. Наприклад вводиться число 123 виводиться 321.
Я реалізував цю задачу так (через рекурсію):
1) вводиться число num
2) шукається найменше arg = 10^n при якому  num / arg = 0
3) функції, яка шукає обернене число передається num, arg та div = arg
     а) створюється змінна d = div / 10
     б) якщо при d не дорівнює 0, то продовжується виконання функції, якщо дорівнює 0, то повертається 0.
     в) result = (num % div) / d
     г) div з кожним викликом функції повинна зменшуватись у 10 разів, тому div = d
     д) зворотнє число обчислюється за формулою result = result * arg / (div * 10) + conserveNumber (num, arg, div) 
При введенні 123 обчислення будуть такими:
1) (123 % 1000) / 100 = 1
2) (123 % 100) / 10 = 2
3) (123 % 10) / 1 = 3
4) 3 * 1000 / (1 *10) = 300
5) 2 * 1000 / (10 * 10) = 20
6) 1 * 1000 / (100 * 10) = 1
7) 300 + 20 + 1 = 321
Ось такий алгоритм в мене вийшов. Я думаю, що це не правильний алгоритм. Кривий алгоритм. 
Будь ласка, підскажіть, як краще організувати виконання даної задачі.
Код:
/* Тип int! Виведення обернутого числа до введеного (наприклад введено 123 - виведено 321) */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int conserveNumber (int num, int arg, int div);
int initArg (int num);
int main (void){
    int num, arg, div, opp;
    printf ("Enter number: ");
    while (scanf ("%d", &num) != false){
        while (num / 10 == 0){
            printf ("Enter number more than 10: ");
            if (scanf ("%d", &num) != true){
                printf ("Error\n!");
                exit (1);
            }
        }
        arg = initArg (num);
        div = arg;
        opp = conserveNumber(num, arg, div);
        printf ("Number = %d\n", opp);
        printf ("Enter number: ");
    }  
    return 0;
}
int initArg (int num){
    int arg;
    int i;
    for (arg = 10, i = 1; (num % arg) / i != 0; arg *= 10, i *= 10)
        ;
    return arg / 10;
}
int conserveNumber (int num, int arg, int div){
    int result;
    int d = div / 10;
    if (d != 0)
         result = (num % div) / d;
    else return 0;   
    div = d;
    result = result * arg / (div * 10) + conserveNumber (num, arg, div);   
    return result;
}