Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/76: Рейтинг темы: голосов - 76, средняя оценка - 4.88
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
1

Проверка разрядности числа

10.07.2015, 22:25. Показов 13663. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, возникла проблема с проверкой разрядности числа. У меня есть переменная, в которой содержится число определенной разрядности. Для примера допустим, что там четырехзначное число. Я сделал следующую проверку:
C#
1
2
3
4
5
6
7
8
9
10
11
while (temp > 0)
            {
                temp = temp / 10;
                coun++;
            }
 if (coun == razryad_chisla)
            {
                return 1;
            }
            else
                return 0;
Но это "грубая" проверка. Проблема в следующем: Если ввести число нужной разрядности, но начинающееся с нуля, например 0111, то программа выдаст, что разрядность исходного числа 3, а не 4, как должно быть.
Может число разложить в массив и там обработать или есть уже придуманный алгоритм и я изобретаю велосипед?
Буду рад помощи и любым идеям как обработать это исключение с нулем в начале числа.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2015, 22:25
Ответы с готовыми решениями:

проверка разрядности процессора средствами командной строки
как проверить разрядность процессора средствами командной строки?

Проверить сумма какой из половин числа и какая из двух частей числа разрядности больше
Доброе время суток всем!!! Интересная задачка, на которую не могу найти ответ!!! Объясните как...

Проверка наличия папки и последующее копирование файлов в зависимости от разрядности системы
Доброго времени! Возникла потребность в написании скрипта для копирования расширения...

Создание числа из разрядности (простейший способ)
Здравствуйте. Имеется задача. Элементарная, на циклы\ветвления: Определите, сколько слагаемых надо...

13
141 / 181 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5
10.07.2015, 22:29 2
Подсчитать разрядность как длину строки, в которую преобразовано число методом ToString().
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
10.07.2015, 22:36 3
Цитата Сообщение от Legend072 Посмотреть сообщение
нужной разрядности, но начинающееся с нуля, например 0111
глупости какие-то. Разрядность есть разрядность. Если наибольший разряд равен нулю, то он за разряд не считается.
0
35 / 35 / 20
Регистрация: 11.08.2012
Сообщений: 142
10.07.2015, 22:36 4
Цитата Сообщение от Legend072 Посмотреть сообщение
Если ввести число нужной разрядности, но начинающееся с нуля, например 0111, то программа выдаст, что разрядность исходного числа 3, а не 4, как должно быть.
Всё правильно! 0111=111, то есть трёхзначное число.

Чтобы можно было записать 0111 или 000876, числовые типы не подходят, наверное нужно использовать тип string и просто считать символы.
1
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
10.07.2015, 23:01 5
Весельчак-У,
C#
1
Math.Ceiling(Math.Log10(x))
Добавлено через 2 минуты
Единтсвенное что надо отлавливать случаи для 0 и 1, и отрицательные числа умножать на -1
1
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
10.07.2015, 23:07  [ТС] 6
Kerry_Jr, Я это знаю и прекрасно понимаю, но для корректной работы программы мне необходимо учитывать все цифры числа, введенного пользователем, собственно, поэтому и нули в начале числа мне необходимо считать за разряд
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
10.07.2015, 23:20 7
Legend072,
Числа не хранят лидирующие нули, тоесть если вводят 00010, это число будет хранится как 10. Если вам нужно количество цифер с лидирующими нулями, то при вводе проверяйте ввели число или нет и получайте длину строки, если число отрицательно, то длина строки - 1
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
11.07.2015, 14:19 8
Цитата Сообщение от Legend072 Посмотреть сообщение
для корректной работы программы мне необходимо учитывать все цифры числа, введенного пользователем
Значит задача не в определении разрядности числа и работа ведется вообще не с числом.
Напишите, в чем состоит задача — тогда будет более понятно, какое решение лучше посоветовать.
0
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
11.07.2015, 22:34  [ТС] 9
Написал сумбурно, не то подразумевал под разрядностью.
Если перефразировать, то мне нужно определить количество цифр в числе вместе с лидирующими нулями, если их ввел пользователь, то есть, например, если пользователь ввел 0111, мне нужно чтобы программа выдала, что тут 4 цифры, а не три, как было бы при определении разрядности.
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
11.07.2015, 23:05 10
Лучший ответ Сообщение было отмечено Legend072 как решение

Решение

Legend072, тогда все просто: работайте со строкой и проверяйте ее на то, чтобы она состояла только из цифр, после чего возвращайте ее длину:
C#
1
2
3
4
5
6
7
int GetDigitCount(string s)
{
   if (string.IsNullOrEmpty(s)) throw ...
   if (!s.All(char.IsDigit)) throw ...
 
   return s.Length;
}
2
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.07.2015, 23:25 11
kolorotur, такими конструкциями вы только запутаете человека...
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
11.07.2015, 23:35 12
Psilon, я не знаю его уровень знаний, потому тут два варианта:
1. Запутать сложной конструкцией новичка.
2. Обидеть "детской" конструкцией более-менее знающего.

Предпочитаю первый вариант — если станет непонятно, то здесь никто не кусается и за вопросы денег не берет — попросит разъяснить и получит или разъяснение, или более простую конструкцию, или, что чаще всего случается, и то и другое

Да и незнакомый код подстегнет интерес к дальнейшему изучению языка
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.07.2015, 00:40 13
Цитата Сообщение от kolorotur Посмотреть сообщение
Обидеть "детской" конструкцией более-менее знающего.
По уровню вопроса, равно как и о его постановке, можно судить об ожидаемом уровне восприятия :dunno:

Цитата Сообщение от kolorotur Посмотреть сообщение
Да и незнакомый код подстегнет интерес к дальнейшему изучению языка
разве что... Хотя многоточие все равно не является частью языка (хотя после С++ и переопределением всего я начинаю в этом сомневаться).
0
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
12.07.2015, 13:44  [ТС] 14
Простое и эффективное решение, я сам сделал через свойство Length, но без проверки из чего состоит строка.
Ваш вариант мне нравится больше своего. Спасибо большое всем за ответы!
0
12.07.2015, 13:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2015, 13:44
Помогаю со студенческими работами здесь

Выдать сообщение о разрядности введенного числа
Программа ждет ввода числа и в зависимости от количества цифр в числе выдает сообщение об их...

Разработать представление числа произвольной разрядности списком
Здравия желаю всем, нужно разработать список "многозначное числ0" с помощью предикатов и фактов, но...

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

Проверить сумма какой из половин числа разрядности больше
Проверить сумма какой из половин числа любой разрядности больше! Объясните, как это сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru