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


Автор: intel 28.10.2007, 19:17
Доброго времени суток

у меня пара вопросов по работе с int / float:

1. есть ли функция для определения длины int-числа? 
2. можно ли както "выбрать" определённый кусок из int'а?  

Пример:
Код


int GetPart(int myInt, int begin, int count);

int number = 123456;
int part = GetPart(number, 0, 3);

cout<<part;

//Вывод;

1234



Спасибо

Автор: under_sun 28.10.2007, 20:08
1,2 - нет
Преобразуй число в строку, и no problem.

Автор: archimed7592 28.10.2007, 20:11
Цитата(intel @  28.10.2007,  19:17 Найти цитируемый пост)
1. есть ли функция для определения длины int-числа? 

Код

int intlen(int value)
{
    int result = 1;
    while (i > 1)
    {
        value /= 10;
        ++result;
    }
}


Цитата(intel @  28.10.2007,  19:17 Найти цитируемый пост)
2. можно ли както "выбрать" определённый кусок из int'а?  

Аналогичными операциями деления и взятия остатка от деления(%) делаешь любую выборку из числа. Хоть 1 3 5-ое.

Добавлено через 1 минуту и 6 секунд
Цитата(under_sun @  28.10.2007,  20:08 Найти цитируемый пост)
Преобразуй число в строку, и no problem. 

Тоже вариант... Думаю, не менее медленный, чем ручная обработка.

Автор: bsa 29.10.2007, 14:43
Думаю, что если воспользоваться функцией log10, можно получить тоже самое, только быстрей:
Код
result = (int)log10(n);

Кстати, получить часть числа можно. Но лучше задавать разряды от конца - не придется вычислять количество десятичных разрядов в числе. В этом случае ответ на второй вопрос будет выглядеть так:
Код
const int begin = 6, end = 3;
const int n = 1234567;
int result = (n % (int)pow(10, begin)) / (int)pow(10, end);
assert(result == 234);

Автор: archimed7592 29.10.2007, 14:59
Цитата(bsa @  29.10.2007,  14:43 Найти цитируемый пост)
Думаю, что если воспользоваться функцией log10, можно получить тоже самое, только быстрей:

Гы-гы... Забыл про такую замечательную мат. ф-цию smile.

Добавлено через 24 секунды
Только c-style cast к int'у не нужен... ;-)

Автор: bsa 29.10.2007, 15:31
Цитата(archimed7592 @ 29.10.2007,  14:59)
Добавлено @ 14:59
Только c-style cast к int'у не нужен... ;-)

Сорри. Не обратил внимание на то, что это на C++.  smile 

Автор: bns 29.10.2007, 16:47
Цитата(bsa @  29.10.2007,  14:43 Найти цитируемый пост)
Думаю, что если воспользоваться функцией log10, можно получить тоже самое, только быстрей:
Выделить всёкод C++
1:
    
result = (int)log10(n);


Я бы не спешил говорить что этот код быстрее smile

Автор: bsa 29.10.2007, 20:34
Цитата(bns @ 29.10.2007,  16:47)
Цитата(bsa @  29.10.2007,  14:43 Найти цитируемый пост)
Думаю, что если воспользоваться функцией log10, можно получить тоже самое, только быстрей:
Выделить всёкод C++
1:
    
result = (int)log10(n);


Я бы не спешил говорить что этот код быстрее smile

А ты проверь. Естественно, это стоит делать не на BC++ 3.1 с выключенной поддержкой сопроцессора, а на чем-нибудь современном.

Автор: Ln78 29.10.2007, 23:02
bsa, так относительно недавно уже проверяли. В http://forum.vingrad.ru/index.php?showtopic=150796&view=findpost&p=1130554

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