![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| slnes |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 24.6.2005 Репутация: нет Всего: нет |
Как перевести ДЕЙСТВИТЕЛЬНОЕ число из десятичной системы счисления в любую (больше двоичной)? Прошу привести принцип перевода, желательно код на C++.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
http://www.nntu.sci-nnov.ru/DISLRN/sysschisl.htm
если там нет о действительных числах -- в алгоритмах я писал как переводить в двоичную систему а из нее легко можно перевести в любую другую -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
По-моему это уже недавно обсуждалось, ну да ладно:
пусть double X - число, которое надо перевести const int N - основание системы счисления string out - число в нужной системе 1) Переводим целую часть. Для этого делим пока не надоест на N, остаток деления добавляем к началу out, если результат деления < N, то нам надоаедает делить, и мы больше не делим(добавляем результат от деления).
2) Дробная часть. 2.1) Делаем X=X - |_X_|, то есть оставляем дробную часть. 2.2) Домножаем на N, пока не надоест. После домножения на N целую часть записываем в конец out и откидываем. Потом смотрим - если дробная часть = 0, то всё. Перевод закончен. Если нет, и такая дробная часть уже была, то значит получается периодичная дробь. Для простоты реализации сделаем максимальную точность в M знаков.
Вот что-то типа того. Это сообщение отредактировал(а) Mayk - 15.8.2005, 15:02 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| slnes |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 24.6.2005 Репутация: нет Всего: нет |
Что значит запись int( чего нибудь)?
|
|||
|
||||
| Mayk |
|
||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В C++ так можно преобразовывать float в int(ну и наоборот). То есть если в C следовало бы писать
то в С++ можно использовать "конструктор" для int:
Вторая форма мне нравится больше, так как в ней меньше писать.В данном случае это надо, чтобы избавится от wargning'ов компиялтора о том, что int'у присваивается float значение. Но это всё же не совсем конструктор - int a(cos(2.0f)*2); ругается по прежнему PS. вообще тут по хорошеу следует использовать static_cast<int>(чего-то там) - преобразование чего-то там к инту. Но это уже имхо перебор. ИМХО такой код очень трудно читается, а то, что он легче поддаётся grep'ированию - достоинство весьма сомнительное(ну зачем оно мне сдалось?). -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||
|
|||||||
| Hroft |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А он точно ругается на приведение типа, а не на неправильную попытку объявления функции?
Я обычно куда-нибудь в библиотечный файлик во всех проектах функцию типа round вставляю, в которой делаю этот самый статик_каст. |
||||
|
|||||
| Mayk |
|
||||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Точно:
Тут же после скобки не встречается тип. Значит, это не объявление ф-ции, а вызов гхм конструктора. Вот это вот нормально компилируется:
А мне, повторюсь, лень писать лишний десяток символов. Вообще из с++ привидений(aka призраков) только dynamic_cast нравится, бо не даёт класс из одной иерархии приводить к классу другой и нуль вернёт, если что не так. Ух, какой оффтопик однако пошёл. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||||
|
|||||||||||
| slnes |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 24.6.2005 Репутация: нет Всего: нет |
Спасибо, переделал под свои нужды, всё работает.
|
|||
|
||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
// Парни! не переписывайте заново iostream. Там всё ничтяк я проверял!
cout<<hex<<chislo cotoroe nuzno perevesti; //Результат: //если число в 10-тичной форме то даст 16-ричную //если число в 16-ричной форме то даст 10-тичную -------------------- people can fly |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Да ну? Проверь вот это:
bcc55 выводит 16.54. C++ из Visual Studio 2003 выводит 16.54. Что не есть быть правда. К тому же как вывести число в 11ричной системе(я правда не знаю)? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
я даже не знаю как будет выглядеть дробное число (16,54) в 16-ричке...
не в п. напиши. насчёт основания системы - если потребности нестандартные, конечно придётся дописывать... Это сообщение отредактировал(а) Helicopterr - 20.8.2005, 22:30 -------------------- people can fly |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
10.8(A3D70) -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |