IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Алгоритм подсчёта количества цифр
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Женский

Репутация: -  0  +


Подскажите алгоритм подсчёта количества цифр целого числа. Никак не получается разобраться. blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Целочисленное деление на 10 (и подсчет количества делений) до тех пор, пока делимое не станет равно 0.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Valery

Репутация: -  0  +


В другой теме встречался и такой вариант:
преобразуешь число в текстовую строку и узнаешь ее длину стандартной функцией.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вариант с делением неверен: на числе 1000 он даст 1 цифру вместо 4.
Вывод: раз речь идет о десятичном представлении, то именно в таком редставлении и надо делать, т.е. единственный разумный вариант - преобразование в строку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(andriano @ 1.12.2007 22:54) *

Вариант с делением неверен: на числе 1000 он даст 1 цифру вместо 4.

blink.gif ?????????????
Будь добр, подтверди свои слова программным кодом.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






С 1000 все будет в порядке, насколько я понимаю, а вот как правильно заметил andriano (не здесь, на другом форуме) - при 0 будет-таки сбой...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Определение количества цифр через строку - это обман.. Просто тем самым работа перекладывается на готовые паскалевские процедуры (которые работают, скорее всего, именно делением). И если будет задача определения количества цифр в другой системе отсчета, то этот метод просто не работает.

Добавлено через 2 мин.
Какой сбой?..
n:= 0;
i:= 0;
repeat
n:= n div 10;
Inc(i)
until n=0;



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский
Реальное имя: Ленка

Репутация: -  0  +


а вот такой код, как вам ( я правда в паскале не очеь, тока изучаю);

program o;
var a,b,i:integer;
begin

read(a);
i:=0;
while a>0 do
begin
a:=a div 10;
i:=i+1;
end;
write(i)
end.


--------------------
не все так плохо, как могло бы быть...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Lapp @ 1.12.2007 23:02) *

blink.gif ?????????????
Будь добр, подтверди свои слова программным кодом.

Прошу прошения, тут у меня произошел какой-то сбой.

Тем не менее, родолжаю утверждать, что именн способ через преобразование в строку и является единственно правильным.

В принципе можно оценить плюсы и минусы таких способов.

Плюсы "строки":
- делает именно то, что нужно. Т.е. запись соответствует условию задачи.
- текст короче. Соответственно, легче написание, отладка и сопровождение.
- не требует доказательства того, что "арифметический" вариант эквивалениен "переводу в строку". И, думаю, именно это является ОСНОВНЫМ преимуществом данного метода. Строгое математическое доказательство получится довольно объемным, причем его прийдется сначала провести разработчику, а затем КАЖДЫЙ РАЗ при смене того, кто будет осуществлять сопровождение кода.

Плюсы "арифметического" варианта:
- вычислительно менее ресурсоемок.
- легко обобщается на любую систему счисления.

В принципе у "арифметического" способа есть ОЧЕНЬ существенный недостаток - к нему неприменим один из основнях принципов ПРАВИЛЬНОГО программирования: "неправильный код должен выглядеть неправильно".

PS. Да, самое серьезное замечание против "строки" - трудность обобщения на случай другого основания. Правильный путь при этом окажется более ресурсоемким, чем в противном случае:
1. Написание процедуры перевода числа в строку в нужной (или произвольной) системе счисления.
2. Воспользоваться этой процедурой.
Примечание: отладку обеих частей производить, естественно, независимо.

PPS. Насчет "перекладывания на "готовые паскалевсекие процедуры":
Если мы в 16-разрядном BP делим longint на longint, неужели мы обязаны вместо оператора деления явно программировать целиком весь алгоритм деления в столбик?

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.12.2020 16:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name