![]() |
помогите с типом int
Вобщем опять я)) препод как всегда смолол чуш..хотя может и не чуш) мне не понять)) вот задание
Дано трехзначное число. Вывести число, полученное при переста- новке цифр сотен и десятков исходного числа (например, 123 перейдет в 213). препод сказал использовать оператор sizeof . собственно я не понял для чего. примера своей програмы нету т.к. я вобще не понял как перебрасывать числа в с++. пробЫвал через сдвиг . толи я не понял как оно работает толи вобще не то делал |
Cherterok,
препод смолол чушь, в существительных женского рода шипящие надо говорить и писать мягко (глаза режет) я тоже не понимаю, зачем нужен sizeof и сдвиг. Если решать задачку на бумаге, то всё обходится без них. Попробуй для начала на бумаге. Распиши подробно как делал (возможны 2 варианта, один хитрый, другой - тот, который хочет препод) немного теории: сдвиг смещает биты в двоичном представлении. Операция выполняется очень быстро, поэтому пользуется популярностью среди программистов. Сдвиг на один влево - это умножение на 2. Сдвиг на один вправо - это деление на 2. В данном случае умножать и делить на 2 не имеет смысла. В итоге: Цитата:
|
Цитата:
|
не ну на бумаге же просто перевернул число и все. а тут как?? теперь я понял что такое сдвиг:)) ато белеберда получалась типо 2<<111 получалось 444. я вобще не понимал как:)
|
Есть еще такая вещь - остаток от деления.
Есть различия в цифрах по позициям. Т.е. позиционная система счисления. Соответственно вопрос - чем цифра одного разряда отличается от цифры другого разряда? Как отличить разряд сотен, от разряда единиц? А на бумаге надо нарисовать концептуальную модель задачи. (я таки нашел это вумное слово :) ) Когда ты меняешь цифры местами ты должен каждую из них охарактеризовать и расписать порядок действий. Чтобы любой человек повторив эти действия пришел к искомому значению. |
1. Можно операцией деления на остаток вычислить количество чисел в числе(или привести преобразование целого в строку и strlen вычислить длину строки) эта длина будет равна количеству разрядов
2. Создаём динамический массив равный количеству разрядов 3. Используя операцию деления на остаток и деления, отрываем разряды и помещаем их в массив 4. Выводим элементы массива на экран, начиная с последнего. |
оО омг) кароче скажу преподу шо тут мего супер масивы и без 5 литров водки не разобраца.
|
Cherterok, решено. Сообразишь сам? :)
|
Самый простой вариант, по-моему, воспользоваться функцией преобразования в строку . Затем взять символ, скопировать в переменную a, скопировать второй символ в первый, а на его место a. Так же можно добавить strlen(str)==3. Затем можно преобразовать строку в число, а можно сразу вывести на экран. Только как тут приписать sizeof? По-любому для int будет 4 байта.
|
Печальный чайник, проще ли? Вводить дополнительные переменные символьного типа. Вызывать подпрограммы обработки. Для работы в пределах 1000 слишком много лишних действий. Это уже современные пользователи, ресурсами, пардон, зажрались.
|
lxa85, без дополнительных переменных по-любому не обойтись. Нужно же где-то хранить десятки, сотни и остатки. А тут на всё хватит четырёх байт строки (ужас как много!!!). Функция преобразования в строку действует быстро и аналогично прямому выделению десяток, сотен, так что, выводя данные в строку, мы много не потеряем. Затем переставить два символа строки и вывести готовое на экран. Это что, по-вашему, мега-растрата ресурсов? Напомню, в любом случае число будет преобразовываться в строку при выводе на экран, и если посмотреть с этой стороны, то у нас получится даже экономия ресурсов. Вот с strlen я ступил, да, проще было сделать проверку x<1000&&x>99.
|
lxa85, согласен с Печальным чайником - вводить сразу строку, она хранится как массив символов, доступ к отдельным произвольный, т.е. нужно банально двум переменным обменяться значениями. И это ещё обобщённый случай, а на самом деле не нужно вообще никаких дополнительных символьных переменных - выводим итоговую строку посимвольно, только порядок вывода подменяем.
|
ладно народ забейте:)) не для моего ума пока это:) масивы и в паскале не понял
|
Печальный чайник, Busla, хм, да, согласен, прошу прощения. В полпервого ночи сложно думалось.
Надо будет мне поаккуратнее в следующий раз. |
Время: 14:31. |
Время: 14:31.
© OSzone.net 2001-