Как найти первую цифру числа c
Перейти к содержимому

Как найти первую цифру числа c

  • автор:

Найти первую и последнюю цифры числа

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

И еще такой вопрос, вот, чтобы узнать последнюю цифру целого числа, делим, например, так: 1234%10=4. Но это не работает для дробных чисел (1234,5%10=4,5 или же вообще 1234,56%10=4,559999. ), т.е. как можно узнать последнюю цифру дробного числа (опять таки, не зная кол-во цифр ни до запятой, ни после)?

Переставить первую и последнюю цифры числа n
Дано натуральное число n, переставить первую и последнюю цифры числа n. C#

Известно целое четырехзначное число. Вывести его первую и последнюю цифры
Как выводить определенные цифры из числа? Имеется ввиду, что число будет любое, вводимое с.

Умножить первую и последнюю строку в матрице
Вот мое, знаю ,как сделать это задание длинным способом, но если возможно через ИФ , то хотелось бы.

В слове удалить первую и последнюю буквы
Ребята помогите, пожалуйста. У меня есть набор слов, нужно в каждом слове удалить первую и.

Лучший ответСообщение было отмечено qodp как решение

Решение

Представить сначала число в виде строки. Потом строку как массив символов и спарсить первый и последний член.

Как вы можете получить первую цифру в int (C #)?

В С#, какой лучший способ получить 1-ю цифру в int? Метод, который я придумал, состоит в том, чтобы превратить int в строку, найти 1-ю строку char строки, а затем вернуть ее обратно к int.

В то время как это выполняет эту работу, похоже, что существует такая проблема, как хорошее, простое математическое решение этой проблемы. Строгое манипулирование кажется неуклюжим.

Изменить:, независимо от разницы в скорости, mystring [0] вместо Substring() все еще просто манипулирует строкой

25 ответов

и i будут содержать то, что вам нужно

Бенчмарки

Во-первых, вы должны решить, что вы подразумеваете под «лучшим» решением, конечно, это учитывает эффективность алгоритма, его читаемость/ремонтопригодность и вероятность появления ошибок в будущем. Однако тщательные модульные тесты могут вообще избежать этих проблем.

Я запускал каждый из этих примеров 10 миллионов раз, а значение результата — это число ElapsedTicks , которое прошло.

Без дальнейших шуток, от самых медленных до самых быстрых, алгоритмы:

Преобразование в строку принимает первый символ

Использование логарифма

Циклическое

Conditionals

Развернутый и оптимизированный цикл

Примечание:

каждый тест вызывает Random.Next() , чтобы получить следующий int

10 проверок. просто изменив порядок чеков, мы можем сделать это намного быстрее

15 циклов, в то время как прогнозируемый скачок составляет 0,5-1 цикла в зависимости от процессора

EDIT

Несколько человек запросили версию цикла

Лучшее, что я могу придумать, это:

Не очень красиво:)

[Отредактировано: первый ответ был очень плохим:)]

[Редактировать 2: я бы, вероятно, советовал решениям, управляющим строкой)

[Редактировать 3: форматирование кода приятно:)]

вариант ответа Антона:

Имел ту же идею, что и Lennaert

Это также работает с отрицательными числами.

Если вы считаете, что ответ Keltex уродлив, попробуйте это, он ДЕЙСТВИТЕЛЬНО некрасиво и даже быстрее. Он разворачивает двоичный поиск, чтобы определить длину.

P.S. У MartinStettner была та же идея.

Я просто наткнулся на этот старый вопрос и почувствовал склонность предлагать другое предложение, так как ни один из других ответов до сих пор не возвращает правильный результат для всех возможных входных значений, и он все равно может быть выполнен быстрее:/p >

Это работает для всех значащих целочисленных значений inclusive -2147483648 , который является наименьшим знаковым целым и не имеет положительного аналога. Math.Abs( -2147483648 ) запускает a System.OverflowException и — -2147483648 вычисляет -2147483648 .

Реализация может рассматриваться как комбинация преимуществ двух самых быстрых реализаций. Он использует двоичный поиск и избегает лишних делений. Быстрый тест с индексом цикла с 100 000 000 итераций показывает, что он в два раза быстрее, чем самая быстрая реализация.

Он заканчивается после 2,829,581 тиков.

Для сравнения я также измерил скорректированный вариант самой быстрой реализации, которая занимала 5,664,627.

Принятый ответ с той же самой коррекцией потребовал 16,561,929 тиков для этого теста на моем компьютере.

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

С# получение первой цифры int в пользовательском классе

Я пытаюсь создать вспомогательную функцию в моей догадке номерной игры, в которой пользователь получает первую цифру числа, которое он/она должен угадать. Поэтому, если сгенерированное число равно 550, он получит 5.

Я много пробовал, может быть, у одного из вас есть идея, что не так?

Под helpButton нажал я:

Это моя последняя попытка, я поместил все это в пользовательский класс. В основном я поставил код, чтобы показать, что находится в строке helpMe.

Если вам нужно больше кода, пожалуйста, скажите мне

Почему не ToString номер и использовать подстроку для получения первого символа?

Если по какой-то причине вы не хотите использовать строковые манипуляции, вы можете сделать это математически, как это

Проблема с вашим кодом заключается в том, что вы выполняете разделение и сохраняете это в отдельной переменной, тогда вы обходите исходное значение. Это означает, что исходное значение изменяется только в первой итерации цикла (и только округлено, не разделено), и если это не произойдет, чтобы сделать условие цикла ложным (т.е. для значений между 10 и 10.5), цикл никогда не закончится,

    Используйте int double of double , который уберет вас от целого ряда потенциальных проблем точности. Используйте оператор >= а не > . Если вы получите значение 10 то вы хотите, чтобы цикл продолжался для другой итерации, чтобы получить одну цифру. Вы должны использовать Math.Floor вместо Math.Round как вы не хотите, чтобы первая цифра была округлена, т. Math.Floor Math.Round первую цифру для 460 как 5 . Однако, если вы используете целое число, то деление обрезает результат, поэтому нет необходимости вообще делать округление. Разделите значение и верните его в ту же переменную. Используйте значение после цикла, нет смысла его обновлять, пока у вас все еще есть несколько цифр в переменной.

Что не так — у вас бесконечный цикл. Math.Round (тест) оставит значение теста неизменным после первой итерации. Возможно, вы планировали использовать firstDigit в качестве переменной, управляющей циклом. В любом случае, как предложили другие, вы можете установить helpMe на первую цифру, преобразовывая ее в строку и используя первый символ. В стороне, вы должны рассмотреть возможность подачи числа в качестве параметра и возврата строки helpMe из метода. Ваш нынешний подход немного хрупкий.

Используя Math.Round(), в вашем примере вы округляете от 5,5 до 6 (это четное целое для документации). Вместо этого используйте Math.Floor, это уменьшит десятичную точку, но даст вам номер, который вы ожидаете от этого теста.

Как @Sam Greenhalgh упоминает, хотя, возвращая первый символ числа, поскольку строка будет чище, быстрее и проще.

Это предполагает, что helpMe является строкой.

По нашему обсуждению в комментариях вам было бы лучше сделать это следующим образом:

Как найти первую цифру числа c

В С#, какой лучший способ получить 1-ю цифру в int? Метод, который я придумал, состоит в том, чтобы превратить int в строку, найти 1-ю строку char строки, а затем вернуть ее обратно к int.

В то время как это выполняет эту работу, похоже, что существует такая проблема, как хорошее, простое математическое решение этой проблемы. Строгое манипулирование кажется неуклюжим.

Изменить:, независимо от разницы в скорости, mystring [0] вместо Substring() все еще просто манипулирует строкой

25 ответов

и i будут содержать то, что вам нужно

Бенчмарки

Во-первых, вы должны решить, что вы подразумеваете под «лучшим» решением, конечно, это учитывает эффективность алгоритма, его читаемость/ремонтопригодность и вероятность появления ошибок в будущем. Однако тщательные модульные тесты могут вообще избежать этих проблем.

Я запускал каждый из этих примеров 10 миллионов раз, а значение результата — это число ElapsedTicks , которое прошло.

Без дальнейших шуток, от самых медленных до самых быстрых, алгоритмы:

Преобразование в строку принимает первый символ

Использование логарифма

Циклическое

Conditionals

Развернутый и оптимизированный цикл

Примечание:

каждый тест вызывает Random.Next() , чтобы получить следующий int

10 проверок. просто изменив порядок чеков, мы можем сделать это намного быстрее

15 циклов, в то время как прогнозируемый скачок составляет 0,5-1 цикла в зависимости от процессора

EDIT

Несколько человек запросили версию цикла

Лучшее, что я могу придумать, это:

Не очень красиво:)

[Отредактировано: первый ответ был очень плохим:)]

[Редактировать 2: я бы, вероятно, советовал решениям, управляющим строкой)

[Редактировать 3: форматирование кода приятно:)]

вариант ответа Антона:

Имел ту же идею, что и Lennaert

Это также работает с отрицательными числами.

Если вы считаете, что ответ Keltex уродлив, попробуйте это, он ДЕЙСТВИТЕЛЬНО некрасиво и даже быстрее. Он разворачивает двоичный поиск, чтобы определить длину.

P.S. У MartinStettner была та же идея.

Я просто наткнулся на этот старый вопрос и почувствовал склонность предлагать другое предложение, так как ни один из других ответов до сих пор не возвращает правильный результат для всех возможных входных значений, и он все равно может быть выполнен быстрее:/p >

Это работает для всех значащих целочисленных значений inclusive -2147483648 , который является наименьшим знаковым целым и не имеет положительного аналога. Math.Abs( -2147483648 ) запускает a System.OverflowException и — -2147483648 вычисляет -2147483648 .

Реализация может рассматриваться как комбинация преимуществ двух самых быстрых реализаций. Он использует двоичный поиск и избегает лишних делений. Быстрый тест с индексом цикла с 100 000 000 итераций показывает, что он в два раза быстрее, чем самая быстрая реализация.

Он заканчивается после 2,829,581 тиков.

Для сравнения я также измерил скорректированный вариант самой быстрой реализации, которая занимала 5,664,627.

Принятый ответ с той же самой коррекцией потребовал 16,561,929 тиков для этого теста на моем компьютере.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *