![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
привет всем!
есть алгоритм перевода из десятичной системы счисления в другую: Код:
void convert(int num, int system, char* out)
{
int curc = 0, n;
char* str = new char[80];
cout << pow(num, 1.0/system) << endl;
while (num > 0)
{
str[curc++] = ((n = (num % system)) < 10) ? n + '0' : n + 'a' - 10;
num /= system;
}
curc--;
for (int i = 0; i <= curc; i++)
out[i] = str[curc - i];
out[++curc] = '\0';
delete str;
}
кто-нибудь подскажет как оптимизировать алгоритм по времени выполнения? собственно, я думаю надо убрать строку str, а остатки записывать сразу в out в обратном порядке. тут возникает проблема определения длины строки с числом в новой системе счисления.
__________________
THE TRUTH IS OUT THERE |
|
|
|
|
| Реклама: | Заходите на сайт MebelStol.ru: купить красивый кухонный стол - отличные цены и большой выбор! | стоматология бобров | стеллаж купить в москве | 132в0200 | барнхаус-100 |
|
|
#2
|
|
Неактивный пользователь
Регистрация: 22.08.2007
Сообщений: 9
Репутация: 1
|
Если это не домашнее задание, то почему бы не воспользоваться имеющимися функциями типа strtod и strtol?
|
|
|
|
|
|
#3
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
как я понял, она преобразует число в виде строки в число. не очень понятно зачем тут base. как её использовать? мне надо число в виде int в десятичке конвертить в строку в системе system. желательно своей функцией.
тут вообще нету base.
__________________
THE TRUTH IS OUT THERE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 22.08.2007
Сообщений: 9
Репутация: 1
|
Это я, извините, прогнал - поздно было
Имелись ввиду функции itoa, ltoa и ultoa, конечно же.Добавлено через 1 час 24 минуты Еще один вариант: stringstream ss; ss << hex << num; return ss.str(); stringstream ss; ss << oct << num; return ss.str(); Опять же вопрос в том в какие системы Вы пытаетесь переводить из десятичной. Если в восьмиричную или шестнадцатиричную, то есть стандартные функции в си и в си++. Если в "любую" то для 12-тиричной Вам придется использовать римские цифры, а для 15-тиричной я вообще не в курсе как и что обозначать. Последний раз редактировалось voidarg; 04.12.2007 в 10:53.. Причина: Добавлено сообщение |
|
|
|
|
|
#5
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
странно, но этих функций нет в описании The GNU C Library. а моя прога должна соответствовать GNU C++.
системы - 2...16.
для 12-ричной цифры - 0...9, A, B, C. 15-ричная аналогично - 0...9, A...E. и всё-таки ктото знает как ускорить преобразование?
__________________
THE TRUTH IS OUT THERE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#6
|
|||||||||||||||||||
|
Новичок
Регистрация: 01.06.2007
Адрес: Херсон, Украина
Сообщений: 13
Репутация: 8
|
количество цифр в новой системе по идее вычисляется так: floor(log10(num) / log10(system)) + 1 |
|||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#7
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Функция перевода в базу с основаниями от 2 до 10..
добавте проверку на входные параметры. ![]() Код:
long convert2(long num, int radix)
{
long converted = 0;
long mul10 = 1;
while( num )
{
converted += mul10 * ( num % radix );
mul10 *= 10;
num /= radix;
}
return (converted);
}
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Оптимизация программы | Zen2004 | Borland C++ Builder | 9 | 19.11.2008 18:42 |
| Многопоточность и Оптимизация в VC++ | Ivan_32 | Visual C++ / С/C++ | 11 | 02.05.2008 16:57 |
| Оптимизация численности персонала | kurthaun | Трудовое право | 0 | 22.12.2007 10:23 |
| Оптимизация графики для веб | kalancha | Вeб Дизайн | 12 | 06.04.2007 06:55 |
|
|