Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сколько цифр в числе, как узнать 
V
    Опции темы
CrasyMen
Дата 8.5.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



как узнать сколько цифр в числе?
например: число 10000   - 5 цифр


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
_hunter
Дата 8.5.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



дели число на 10 пока результат > 1 -- получиш чсло знаков - 1.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Klin
Дата 8.5.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Ну или если извращаться то можно так:
Код

 int x = 10000;
 IntToStr(x).Length();



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
CrasyMen
Дата 8.5.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Klin,  Спасибо. Этот способ лучше предыдущего (имхо).


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
fish9370
Дата 8.5.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(CrasyMen @ 8.5.2007,  20:00)
Klin,  Спасибо. Этот способ лучше предыдущего (имхо).

несмотря на то что, этот способ проще, я бы предпочел первый вариант - он быстрее.. и в нем нет привязки к VCL..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
CrasyMen
Дата 8.5.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Цитата(fish9370 @  8.5.2007,  20:12 Найти цитируемый пост)
несмотря на то что, этот способ проще

я догадался, просто не хочу усложнять себе жизнь. Для курсовой сойдет. 


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Voldemar2004
Дата 8.5.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 1
Всего: 23



Код
// Функция подсчета количества цифр (проверка на цифровой символ)

#include <string.h>     // strlen()
#include <ctype.h>      // isdigit()

unsigned long NumberCount(char* Text);

unsigned long NumberCount(char* Text)
{

unsigned long Counter = 0;

        for(unsigned long i=0; i<strlen(Text); ++i)

          if ( isdigit(Text[i]) ) ++Counter;

return Counter;

}
Или так:
Код

int Num_Count(int a);

int Num_Count(int a)
{

int f;
f=0;
        do
        {
         a/=10;
         f++;
        }
        while(a);

return f;
}



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Klin
Дата 8.5.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(CrasyMen @  8.5.2007,  21:00 Найти цитируемый пост)
Klin,  Спасибо. Этот способ лучше предыдущего (имхо). 

Не лучше, а легче. 
_hunter и Voldemar2004, предложили более правильный путь решения, поскольку в моем случае идет преобразование типа, а у них лишь работа с ним.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Voldemar2004
Дата 8.5.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 1
Всего: 23



Цитата(fish9370 @  8.5.2007,  21:12 Найти цитируемый пост)
нем нет привязки к VCL..
И соответственно будет работать везде.
Цитата(CrasyMen @  8.5.2007,  21:17 Найти цитируемый пост)
 не хочу усложнять себе жизнь. Для курсовой сойдет. 
Но потом будет легче, понимание приходит не сразу...
Цитата(CrasyMen @  8.5.2007,  21:00 Найти цитируемый пост)
Этот способ лучше предыдущего (имхо).
опять же привязка к VCL...



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Жуть
Дата 9.5.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



а что если посчитать десятичный логарифм?
Код

int DigitsCount(int value)
{
    if ( !value )      //обработка 0
        return 1;

    int add = 1;
    if (value < 0)
    {
        value = abs(value);
    }
    return log10(double(value)) + add;
}


Это сообщение отредактировал(а) Жуть - 9.5.2007, 11:36
PM MAIL   Вверх
Voldemar2004
Дата 9.5.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 1
Всего: 23



Жуть, оригинально smile  smile  smile , только лишний раз вызывать функцию логарифма ?


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Klin
Дата 9.5.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Жуть @  9.5.2007,  12:34 Найти цитируемый пост)
а что если посчитать десятичный логарифм?

Зачем так усложнять? Самый простой способ - это деление на 10.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Жуть
Дата 9.5.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Цитата(Voldemar2004 @  9.5.2007,  11:43 Найти цитируемый пост)
только лишний раз вызывать функцию логарифма ?

Цитата(Klin @  9.5.2007,  12:01 Найти цитируемый пост)
Самый простой способ - это деление на 10.

Я просто предложил альтернативу...

Продолжая оригинальничать (реализация для машин с 32битным int, оптимизация в сторону меньших чисел):
Код
int DigitsCount(int value)
{
    if (value < 0)
        value = abs(value);
    if (value < 10)
        return 1;
    else
    if ( value < 100 ) 
        return 2;
    else
    if (value < 1000 )
        return 3;
    else
    if (value < 10000 )
        return 4;
    else
    if (value < 100000 )
        return 5;
    else
    if (value < 1000000 )
        return 6;
    else
    if (value < 10000000 )
        return 7;
    else
    if (value < 100000000 )
        return 8;
    else
    if (value < 1000000000 )
        return 9;
    else
    if (value < 10000000000 )
        return 10;
    else
        return 11;
}

 smile 

Это сообщение отредактировал(а) Жуть - 9.5.2007, 12:35
PM MAIL   Вверх
fish9370
Дата 9.5.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



жуть, что-то тебя понесло сказал для 32битных int, а сам попетлял в дебри.. что это за 32битный int такой 10000000000 ?
по-моему ты гонишь, тут парни давно правильное решение дали.. а ты предлагаешь что-то совсем бредовое..  smile 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Klin
Дата 9.5.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Жуть, если вы всегда так оригинальны, вы очень точно подобрали ник. smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Жуть
Дата 9.5.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



2fish9370, 
Цитата(fish9370 @  9.5.2007,  12:48 Найти цитируемый пост)
что это за 32битный int такой 10000000000 ?

Уупс... перестарался с нулями

Цитата(fish9370 @  9.5.2007,  12:48 Найти цитируемый пост)
по-моему ты гонишь, тут парни давно правильное решение дали.. а ты предлагаешь что-то совсем бредовое..

Мое решение не работает? Работает слишком медленно? Не компилируеться? В чем бредовость? В чем неправильность ?
PM MAIL   Вверх
fish9370
Дата 9.5.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(Жуть @ 9.5.2007,  13:01)
Мое решение не работает? Работает слишком медленно? Не компилируеться? В чем бредовость? В чем неправильность ?

бредовость в том, что от структурного программирования мы перешли к линейному.. я конечно не имею ничего против, чтобы ты для себя так делал, но было бы плохо если бы кто-то вооружился твоим методом..

да и еще, давно хотел тебе сказать..

Код

if (value < 0) 
        value = abs(value);


проверка на отрицательность тут излишняя.. достаточно было value=abs(value);  


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Жуть
Дата 9.5.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Цитата(fish9370 @  9.5.2007,  13:12 Найти цитируемый пост)
от структурного программирования мы перешли к линейному

В каком месте? Требую в студию определение "линейного программирования"(ато мне что-то сразу вспоминаеться Тахо и целевая ф-ция и т.д.) ! И точное определение того, где я отхожу от структурного! (можно написать подобный метод и для ООП)
Легко себе представить набор чисел, для которых заранее известно, что 90% времени они могут принимать значения в каком-л диапазоне, напр 1000 - 1000000 и когда надо вычислять их длинну ну очень часто, и тогда можно написать "каскадированный if" при котором будет значительный выигрыш во времени по сравнению с циклом...
Для разных аспектов одной и той же задачи есть разные решения.




Это сообщение отредактировал(а) Жуть - 9.5.2007, 13:27
PM MAIL   Вверх
W4FhLF
Дата 9.5.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



lg(|int|) + 1

Добавлено через 1 минуту и 2 секунды
+ округлить ессно


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Жуть
Дата 9.5.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



2W4FhLF, уже было, засмеяли...
PM MAIL   Вверх
fish9370
Дата 9.5.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(Жуть @ 9.5.2007,  13:23)
В каком месте? Требую в студию определение "линейного программирования"(ато мне что-то сразу вспоминаеться Тахо и целевая ф-ция и т.д.) ! И точное определение того, где я отхожу от структурного! (можно написать подобный метод и для ООП)
Легко себе представить набор чисел, для которых заранее известно, что 90% времени они могут принимать значения в каком-л диапазоне, напр 1000 - 1000000 и когда надо вычислять их длинну ну очень часто, и тогда можно написать "каскадированный if" при котором будет значительный выигрыш во времени по сравнению с циклом...
Для разных аспектов одной и той же задачи есть разные решения.

ну хватит.. я же сказал, для себя ты должен делать как умеешь.. каскадированный if я считаю тут неуместным..  современные проыессоры с их многоуровневыми конвеерами и кэшами циклы хавают не хуже чем твой каскадированный if.. хочешь выигрыша - пиши на АСМе.. и никто тебя за первый твой вариант не засмеивал..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 9.5.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(Жуть @  9.5.2007,  13:28 Найти цитируемый пост)
засмеяли...


Они наверное не знают, что для этого никаких специальных и громоздких функций не надо, ибо вычисление логарифма поддерживается аппратно, т.е. существует специальные инструкции процессора. Поэтому никаких сложностей, тормозов и наворотов. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.