Поменять соседние цифры числа местами

Сейчас разбираюсь вот с каким заданием (краткий пересказ):

На вход дано целое число n. Преобразуйте его таким образом, чтобы две соседние цифры числа были поменяны местами.

То есть, у нас есть целое число n = 123456, его необходимо преобразовать в число 214365.

Вот мой код на C (код рабочий). Хотелось бы услышать критику со стороны насчет его эффективности. Что бы вы улучшили или предложили изменить? Потому что мне его надо будет сдать, а принимающий достаточно строгий)

#include <stdio.h>

int rewrite(int n) {
    
    int var_1, var_2;
    int n_new = 0;
    
    while (n >= 10) {     //Ставим условие >= 10 по причине того,
                          //что надо var_1 и var_2 присвоить по цифре
        var_1 = n % 10;   //То есть надо иметь в запасе как минимум десяток
        n /= 10;
        var_2 = n % 10;
        n /= 10;
        
        n_new *= 10;    //Записываем n_new таким образом, чтобы
        n_new += var_2; //соседние цифры были поменяны местами
        n_new *= 10;      
        n_new += var_1;
        
    }
    
    while (n_new != 0) { //Мы записывали число n_new при этом делили
                         //число n с конца, следовательно, его надо перевернуть
        n *= 10;
        n += n_new % 10;
        n_new /= 10;
        
    }
    
    return n;

}

int main() {
    
    int n;
    
    printf("Пожалуйста, введите число n: ");
    scanf("%d", &n);
    
    printf("Обработанное число: %d\n", rewrite(n));
    
    return 0;  }

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

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

12345 во что должно превратиться? В 103254 или в 13254? И что делать с отрицательными числами?

Если считать, что в 103254, то я бы со скоростью ввода текста :) делал так:

unsigned int r2(unsigned int n)
{
    unsigned int m = 0;
    for(unsigned int e = 1;n;n/=100)
    {
        unsigned int d = n%100;
        d = (d%10)*10+d/10;
        m += d*e;
        e *= 100;
    }
    return m;
}

Если в 13254, то

unsigned int r2(unsigned int n)
{
    unsigned int m = 0, e = 1;
    for(;n > 10;n/=100)
    {
        unsigned int d = n%100;
        d = (d%10)*10+d/10;
        m += d*e;
        e *= 100;
    }
    return m + n*e;
}

О критике...

Ну, например, n_new *10;, вероятно, должно быть n_new *=10;.

А еще введите число, скажем, 120304, и посмотрите, что получится :(

→ Ссылка