Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Поменять цифры в числе местами


Автор: pikiviki 17.3.2014, 01:50
Как переставить цифры в числе местами. Допустим есть число 543 мне нужно получить 345  или 23 мне нужно получить 32. 
Я делю все так

Для двухзначного  смена местами
Код

            iChislo = 23;
            iA = iChislo / 10;
            iB = iChislo - iA * 10;
            iChislo = iB * 10 + iA;


Для трехзначного выглядит так 
Код

                        iChislo = 543;
            iA = iChislo / 10;
            iB = iChislo - iA * 10;
            iBuffOne = iB * 100;
            iBuffTwo = iA;
            iA = iA / 10;
            iBuffTwo = iBuffTwo - iA * 10;
            iChislo = iBuffOne + iBuffTwo * 10 + iA;


Собственно почему я к вам обращаюсь. Если у меня стандартный поток ввода до 10 в 9 степени. Не возможно же писать такую перестановку для 10, 100, 1000, 10 000, 100 000 и т д. Получится мне таких перестановок нужно будет написать 9 штук кто ж меня то умным на завоет. Может кто подскажет универсальную (для сотых тысячных десяти тысячных и.т.д) перестановку такого рода. Может что-то похожее на reverse в STL.

Автор: Guinness 17.3.2014, 07:25
А не проще создать массив из чисел каждого разряда? Т.е. есть у Вас число 123456, Вы его преобразете в массив {1,2,3,4,5,6}. А дальше уже что хотите, то и делаете.

Автор: _zorn_ 17.3.2014, 08:41
На мой взгляд самый простой и универсальный способ - преобразование  в строку, перетасовывание и преобразование обратно в число.

Автор: volatile 17.3.2014, 09:04
Код

unsigned reverse (unsigned x)
{
   unsigned y = 0;
   while (x)
   {
      y = y * 10 + x % 10;
      x /= 10;
   }
   return y;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)