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


Автор: WinDWS 18.11.2008, 21:40
Составить функцию, которая, получив целое число, преобразует его, поменяв в нем первую и последнюю цифру.
как это сделать подскажите пожайлуста! заранее спасибо!

Автор: sQu1rr 18.11.2008, 23:06
если зрение не обманывает - целое (int и ему подобные)
тогда
Код

int x = 125;
char integer[4] = itoa(x);
integer[3] = '\0';
char temp;
temp = integer[2];
integer[2] = integer[0];
integer[0] = temp;
x = atoi(integer);


Только единственное придется все сделать подругому, потому что в числе не обязательно будет 3 цифры, все это придется автоматизировать... советую string контейнер использовать

Автор: mes 18.11.2008, 23:14
Цитата(sQu1rr @  18.11.2008,  23:06 Найти цитируемый пост)
советую string контейнер использовать 

а можно и без перевода числа в строку :
Код

int my_func (int chislo)
{
   unsigned int size = 1;  // даже если chislo == 0 все равно длина в 1 цифру
   unsigned int base = 1;  // основа числа
   for (unsigned int i=abs(chislo); i>9; i/=10) ++size, base*=10; // считаем длину числа

   int first = chislo/base;  // первая цифра
   int last  = chislo-(chislo/10)*10; // последняя цифра

   return first + last*base  // ставим цифры на новые места
          + (chislo-first*base-last);// и прибавляем серединку (остаток числа).

}


Автор: megabist 19.11.2008, 07:59
А переполнения, при таких действиях, никто не боится?
Со строкой этого можно не бояться, если не приводить обратно в инт.
{Если я чего попутал, извините, в последнее время с С оч косвенно общаюсь.}

Автор: sQu1rr 19.11.2008, 09:22
Цитата(megabist @ 19.11.2008,  07:59)
А переполнения, при таких действиях, никто не боится?
Со строкой этого можно не бояться, если не приводить обратно в инт.
{Если я чего попутал, извините, в последнее время с С оч косвенно общаюсь.}

Если по схеме mes делать, то можно не бояться, так как он работает уже с интом, а значит его размерне увеличится и переполнение не случится...
Если по моей схеме переводит в инт число больше диапазона, то через atoi() оно по идее обрезается. Хотя  я точно не знаю (может и округляется)
Вообщем проблем быть не должно

Автор: megabist 19.11.2008, 20:32
sQu1rr, Да и в его схеме помоему тоже можно бояться,. там если я не ошибаюсь, в максимуме- первая цифирька 4, и не больше. так вот более 50% шанс, что последняя (ну, 50, это типа если число уже по длине вписалось аккурат) будет больше =)
http://www.citforum.ru/programming/cpp_march/cpp_017.shtml

Я бы ради верности, либо выводил строкой, либо в массив их пихал...
А либо, как вариант, сразу же, скажем пихнуть в long, и там уже работать =)

Автор: WinDWS 19.11.2008, 23:38
Спасибо Люди добрые!! я сделал через цикл! все работает! еще раз огромное спасибо!!

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