Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/96: Рейтинг темы: голосов - 96, средняя оценка - 4.57
Alex12345647
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 1
1

Посчитать количество цифр в числе

03.11.2011, 10:32. Просмотров 18467. Ответов 39
Метки нет (Все метки)

Помогите не могу никак разобратся!
нужно сщздать прогу.
Пользователь вводит с клавиатуры число - программа должна показать сколько в данном числе цифр. Число вводится целиком в одну переменную.

скрины здесь [SPOILER]
 Комментарий модератора 
Спамеры и рекламщики здесь не задерживаются... Еще одна такая выходка и Вы отправитесь в бан.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2011, 10:32
Ответы с готовыми решениями:

Посчитать количество четных и нечетных цифр в числе
Дано натуральное число N . С помощью операций деления нацело и взятия остатка...

Вывести количество цифр в числе и сумму этих цифр
Натуральное число A, А<100, написать программу которая выводит количество цифр...

Определить количество цифр в числе
Дано число К. Определить количество цифр в числе.

Количество нечетных цифр в числе
В чем здесь может быть ошибка? Основная программа: ...

Определить количество цифр в числе
Определить количество цифр в числе ... Например: вводишь 7890 программа...

39
galexser
95 / 95 / 8
Регистрация: 24.11.2010
Сообщений: 237
03.11.2011, 11:01 2
что то не нашел я скрины!
Если пользователь вводит число в TextBox, то так
C#
1
int Kolichestvo_cifr = textbox1.Text.Length;
0
Ereona
369 / 130 / 18
Регистрация: 16.07.2010
Сообщений: 341
03.11.2011, 12:03 3
C#
1
number.ToString().Length
0
kolorotur
Эксперт .NET
10614 / 8795 / 2194
Регистрация: 17.09.2011
Сообщений: 15,067
Завершенные тесты: 1
03.11.2011, 13:39 4
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
int n = 123456789;
int digitCount = (int)Math.Log10(n) + 1;
Никогда, ни в коем случае не работайте с числами через конвертирование их в строку.
11
nfsk_hedgehog
32 / 32 / 9
Регистрация: 02.09.2009
Сообщений: 64
03.11.2011, 14:12 5
Цитата Сообщение от kolorotur Посмотреть сообщение
Никогда, ни в коем случае не работайте с числами через конвертирование их в строку.
Не могли бы пояснить в двух словах, почему?
0
Killster
181 / 184 / 17
Регистрация: 26.11.2010
Сообщений: 511
03.11.2011, 15:35 6
Цитата Сообщение от nfsk_hedgehog Посмотреть сообщение
Не могли бы пояснить в двух словах, почему?
Дико медленно.
0
kolorotur
Эксперт .NET
10614 / 8795 / 2194
Регистрация: 17.09.2011
Сообщений: 15,067
Завершенные тесты: 1
03.11.2011, 19:08 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

nfsk_hedgehog, во-первых, как вам сказали выше - это медленно.
Во-вторых, чисто технически глупо забивать кучу для тривиальных задач.
В-третьих, если это задание в школе или универе, то преподаватель наверняка хочет увидеть ваше умение работать с числами, а не строками.

А теперь самое главное. Строка - это отображение числа. А у отображения есть такое свойство, как формат. Который может быть разным в разных культурах (см. региональные настройки).
Например, число один миллион в некоторых культурах отображается как "1,000,000". В нем 7 чисел, но в строке, его отображающей, девять символов. В результате программа работает не правильно.
Будет весело, если вы разрабатываете какое-нибудь приложение для работы с финансами, напримнр.
2
WonderFlik
03.11.2011, 19:27
  #8

Не по теме:

фанатизм какой то О_о имхо ToString().Length намного яснее и локаничнее, конечно если речь идет о каких то диких мат. вычеслениях с матрицами 100500х100500 стоит обращать на такие вещи внимание, а если это просто банальная необходимость узнать длину одного числа... int.ToString() всегда только цифры возвращает ну кроме случаев NaN

0
kolorotur
03.11.2011, 21:54
  #9

Не по теме:

Цитата Сообщение от WonderFlik Посмотреть сообщение
фанатизм какой то
Нет, это следование стандартам написания качественного кода.
В противном случае рождаются перлы типа "if (IsDisposed.ToString().Length == 4) { }"

Цитата Сообщение от WonderFlik Посмотреть сообщение
int.ToString() всегда только цифры возвращает
А если число негативное?

Цитата Сообщение от WonderFlik Посмотреть сообщение
кроме случаев NaN
Ок, как быть в случае NaN?

0
WonderFlik
04.11.2011, 11:02
  #10

Не по теме:

наверное также как брать логарифм от отрицательных чисел от nan infinity, да еще плюс ко всему 0

0
kolorotur
04.11.2011, 11:37
  #11

Не по теме:

Согласен - нужны проверки. А раз число нужно проверять, то тем более нет смысла вдруг ни с того ни с сего гнать его в строку. Раз начали работать с числом, то и продолжаем работать с ним же.

0
Faba
04.11.2011, 12:37
  #12

Не по теме:

по-моему очевидно же, что в использовании ToString() в данном случае - минусов больше, чем плюсов. число - это число, строка - это строка. зачем еще выделять память в куче для такого рода задачи? лучше сразу правильно учиться программировать, имхо

0
SergiiK
37 / 39 / 6
Регистрация: 10.11.2011
Сообщений: 70
11.11.2011, 23:27 13
Как вариант,
в случае с дотошным преподом, чтоб не доставал потом вопросами про логарифм, предлагаю в цикле делить число на 10 пока не получиться ноль

C#
1
2
3
4
5
6
7
int number2 = number;
int digits = 0; // кол-во цифр
while (number2 > 0)
{
  digits++;
  number = (int)(number/10);
}
Извините, в студии не проверил.

А на счет string полностью согласен с kolorotur! Да и региональные стандарты типа 1'000'000 вещь коварная.
0
KrugerZzZ
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 7
31.03.2013, 14:11 14
А как быть с числом, к примеру, "000110101"? Не один из предложенных вариантов программы не работает и будет говорить, что цифр 6, т.к. первые три цифры нули.
0
kolorotur
Эксперт .NET
10614 / 8795 / 2194
Регистрация: 17.09.2011
Сообщений: 15,067
Завершенные тесты: 1
31.03.2013, 15:46 15
Цитата Сообщение от KrugerZzZ Посмотреть сообщение
А как быть с числом, к примеру, "000110101"?
Если считать впереди идущие нули, то длина любого числа априори равняется бесконечности, потому все еще проще.
0
Vitall
756 / 536 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
31.03.2013, 16:36 16
Цитата Сообщение от WonderFlik Посмотреть сообщение
фанатизм какой то О_о имхо ToString().Length намного яснее и локаничнее,
Вспомнился один пример из интересной статьи )
http://lurkmore.to/%D0%98%D0%BD%D0%B...BA%D0%BE%D0%B4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool value;
 
…
 
if (value.ToString().Length == 4)
{ 
  ...
}
else if (value.ToString().Length == 5)
{
  ...
}
else
{
   // внимание! кто-то хочет нас обмануть подсунув некачественный (по всей вероятности, протухший) bool, но мы ему не дадим:
   throw new ArgumentException();
   // у некоторых племенных индусов бывает и продолжение, на случай если throw вдруг не сработает:
   return !true && !false;
   // надо же вернуть какую-нибудь чепуху , чтобы заказчик не ныл
}
0
kolorotur
31.03.2013, 20:10
  #17

Не по теме:

Цитата Сообщение от Vitall Посмотреть сообщение
C#
1
// внимание! кто-то хочет нас обмануть подсунув некачественный (по всей вероятности, протухший) bool
Автор комментария абсолютно не разбирается в предмете.
Блок else там нужен для многоязыковой поддержки: в русской локали true.ToString() возвращает "внатуре".

1
SergiiK
37 / 39 / 6
Регистрация: 10.11.2011
Сообщений: 70
01.04.2013, 10:28 18
если "000110101" число (как сказано в задании), а не строка, тогда оно равно 110101. Так что мой алгоритм с делением на 10 должен решать проблему
0
proggamer12
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 509
Завершенные тесты: 1
26.06.2014, 18:16 19
Одно из заданий ЕГЭ по информатике (а именно B8) построено на определении количества символов в строке.
Эта проблема решается в этих заданиях так:
C#
1
2
3
4
5
6
7
int x, counter;
...
while (x>0)
{
   x=x/10;
   counter++;
}
Также этот вариант был предложен SergiiK.
Так как x объявлен как int, то в результате деления int на 10, остаток от деления будет отсекаться (т. е. при x=56, после x=x/10, x будет = 5, а counter будет равен 1, затем, после деления x=5 на 10, x будет равен 0, а counter будет равен 2.

Пример программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
 
 
class Example2 
{
    static void Main()
    {
        Console.Write("Введите число: ");
        string str = Console.ReadLine();
 
        int x = Convert.ToInt32(str);
 
        int counter = 0;
 
        while (x>0)
        {
            counter++;
            x = x / 10;
        }
 
        Console.WriteLine("Данное число содержит цифр: " + counter);
 
    }
 
}
0
BeeRchik
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 11
27.06.2014, 01:15 20
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Program
{
    static void Main(string[] args)
    {
        Chislo chislo = new Chislo();
        chislo.Metod();
    }
}
class Chislo
{
    string i;
    int kolvo;
 
    public void Metod()
    {
        Console.Write("Введите число: ");
        i=Console.ReadLine();
        int a=0;
     
        while(a<=i.Length)  
        {
                kolvo= a++;
        }
        Console.WriteLine("Количество цифр {0}",kolvo);
        Console.ReadKey();
    }
}
Мне кажется самый нормальный вариант, ещё можно трай кэч поставить, чтобы буквы не вводили!!! Так как он и буквы считает!!!

Добавлено через 28 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Program
{
    static void Main(string[] args)
    {
        Chislo chislo = new Chislo();
        chislo.Metod();
    }
}
class Chislo
{
    string i;
    int kolvo;
    public void Metod()
    {
        stop: Console.WriteLine("Вводить можно только числа!!!");
        Console.Write("Введите число: ");
        i = Console.ReadLine();
        try
        {
            int b = int.Parse(i);
        }
        catch
        {            
            goto stop;
        }        
        int a = 0;
        while (a <= i.Length)
        {
            kolvo = a++;
        }
        Console.WriteLine("Количество цифр {0}", kolvo);    
        Console.ReadKey();
    }
 
}
Немного исправил. Ну кому не так, доведите до ума. Я только 2-е недели программирование учу))))
0
27.06.2014, 01:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 01:15

Определить количество цифр в числе
Определить количество цифр в числе

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru