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

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

  • автор:

Подскажите как найти первую (последнюю) цифру числа (с++)

число целое, не указано это двух цифровое, трех цифровое или пяти цифровое.. . так что деление и остатки не прокатят.

Дополнен 11 лет назад
Вадим, мне потом их суммировать нужно, не прокатит
Лучший ответ
прокатит и деление и остатки: http://ideone.com/Nd7wMc
Остальные ответы
Преобразуйте в char* возьмите первый и последний байт, преобразуйте обратно в цифры.

1. Преобразовать число в строку (IntToStr)
2. Узнать количество символов в строке (length)
3. Взять первый и последний символ (str[])
4. Преобразовать обратно в число (StrToInt)

Источник: [ссылка появится после проверки модератором]

число % 10 вернёт остаток от деления на десять. конкретно — последняя цифра.
а первую цифру — в цикле ищи.
число >=10. число = (int) число/10;
в результате в числе будет только старший разряд числа

int funct(int number)
<
int digit1,digit2;
digit1=number (знак процента) 10;
if(number>=10)
number=number/10
digit2=number;
return digit1+digit2;
>
ёбанный движёк мэйла

Первая цифра числа

Найти первую цифру целого числа. Отсчёт начинать с наивысшего разряда.

Входные данные

Одно целое 64-х разрядное число, содержащее не менее одной цифры. Число может быть отрицательным.

Выходные данные

Выведите первую цифру заданного числа.

Алгоритм решения задачи

  • Удаляем из числа последнюю цифру пока оно больше или равно 10;

Решение

using System; class Program < static void Main(string[] args) < var n = Math.Abs(Convert.ToInt64(Console.ReadLine())); while (n >= 10) < n /= 10; > Console.WriteLine(n); > > 

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

Добрый день. Кто нибудь сможет объяснить, как это работает?

алгоритм нахождения цифры n-значного числа:

(num % 10 ** 1) // 10 ** 0
последняя цифра

(num % 10 ** 2) // 10 **1
предпоследняя цифра

(num % 10 ** 3) // 10 **2
предпредпоследняя цифра …

(num % 10 ** n) // 10 ** n-1
первая цифра

(num % 10 ** n-1) // 10 ** n-2
вторая цифра

Прохожу курс программирования. Все, чем пользуюсь из инструкции выше не работает в заданиях и даже в VScode. Я в целом не понимаю, как работает (или как должен работать) алгоритм нахождения цифры n-значного числа.

Leo_Skil
27.03.23 11:52:05 MSK

  • Ответить на это сообщение
  • Ссылка
12345678904 % 10 4 

Третье от конца:

Math.floor(12345678904 % 1000 / 100) 9 
Math.floor(12345678904 % 10000 / 1000) 8 

uwuwuu
( 27.03.23 12:00:40 MSK )
Последнее исправление: uwuwuu 27.03.23 12:07:01 MSK (всего исправлений: 3)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

% это остаток от деления. Уже написали что 12345678904 % 10 = 4 это можно записать так 12345678904 / 10 = 1234567890.4 . Тоесть / просто поделит число, а % поделит число, уберёт целое и оставит остаток. % это оператор деления по модулю в виде функций оно имеет вид такой часто mod() На курсах должны это разжевать.

LINUX-ORG-RU ★★★★★
( 27.03.23 12:17:27 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

int(str(num)[-i]) 

вот так делайте раз это питон;-)

(num % 10 ** 1) // 10 ** 0 последняя цифра

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

AntonI ★★★★
( 27.03.23 12:35:18 MSK )
Последнее исправление: AntonI 27.03.23 12:42:45 MSK (всего исправлений: 2)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:17:27 MSK

Тема // не раскрыта!

Вообще за переход от целочисленного деления в py2 к «обычному» в py3 ИМНО надо клавой по пальцам разработчиков.

AntonI ★★★★
( 27.03.23 12:41:20 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:41:20 MSK

А это я уже не знаю :3

LINUX-ORG-RU ★★★★★
( 27.03.23 12:42:59 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:42:59 MSK

В python2, как и в других нормальных ЯП, было 3/2=1

В python3 решили что это источник ошибок и стало 3/2=1.5

Но ввели операцию //, 3//2=1

AntonI ★★★★
( 27.03.23 12:45:05 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:17:27 MSK

Кажется, я понял. Если конечную цифру находим так: n % 10 или остаток от n / 10 (что является последней единицей), то второе от конца должно быть так: n % 100 (запятая на еще один знак влево, что знаит что покажет последний десяток в числе), после нахождения десятка надо найти его первую цифру (от лева), т.е. найти число десятков (что нам и нужно): n / 10. И потом для каждой цифры левее в числе прибавляем по нолику в делителях:

второе от конца:

третье от конца:

n % 1000 / 100 #плюс нолик

А как находить первое число?

Leo_Skil
( 27.03.23 12:46:03 MSK ) автор топика
Последнее исправление: Leo_Skil 27.03.23 12:47:03 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от Leo_Skil 27.03.23 12:46:03 MSK

Только не / а //, см выше.

num%10**(n-1)//10**(n-2) 
n = len(str(num)) 

ps и не число а цифру.

AntonI ★★★★
( 27.03.23 12:48:42 MSK )
Последнее исправление: AntonI 27.03.23 12:49:55 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Leo_Skil 27.03.23 12:46:03 MSK

Если конечную цифру находим так: n % 10

Используйте нормальную терминологию — разряд, соответственно младший или старший разряд, а не «конечная цифра» и «первое число».

В противном случае вас никто не поймёт и даже может быть над вами будут смеяться.

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

vvn_black ★★★★★
( 27.03.23 12:49:58 MSK )
Последнее исправление: vvn_black 27.03.23 12:52:36 MSK (всего исправлений: 2)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

Я не знаю питон и это хорошо я знать его не хочу ^.^

LINUX-ORG-RU ★★★★★
( 27.03.23 12:51:00 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:51:00 MSK

Хороший ЯП для своей ниши. Не без проблем конечно…

AntonI ★★★★
( 27.03.23 12:52:05 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:48:42 MSK
i586 ★★★★★
( 27.03.23 12:53:37 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:52:05 MSK

Мне Lua хватает, для меня он почти идеален. Более того был бы ещё более куцый в идеале с 1 единственной версией или 100% обратной совместимостью, но отлаженный временем язык яб его взял. Питон я использовать не буду просто потому что принудительное форматирование, я прощаю это мake, но дальше для меня это уже перебор. Могу себе позволить дропнуть целый язык и всё что с ним связано ибо просто любитель, ключевое слово любитель если не любо то фтопку=)

LINUX-ORG-RU ★★★★★
( 27.03.23 12:55:42 MSK )
Последнее исправление: LINUX-ORG-RU 27.03.23 12:58:18 MSK (всего исправлений: 2)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от i586 27.03.23 12:53:37 MSK

AntonI ★★★★
( 27.03.23 12:57:09 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:55:42 MSK

Я не знаю Lua, но слышал много хорошего.

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

Хотелось бы какую то минимальную версию питона шоб везде легко вставала и работала.

AntonI ★★★★
( 27.03.23 13:00:08 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от i586 27.03.23 12:53:37 MSK

Значит для нахождения первой цифры в числе мы делим ее на ее самый большой разряд, для чего берем num % 10n-1, где n — число цифр (так, чтобы перенести запятую после первой цифры). Он покажет первую цифру. Получившееся необходимо разделить нацело num //10n-2

Leo_Skil
( 27.03.23 13:02:57 MSK ) автор топика

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 13:00:08 MSK

Если использовать lua как язык общего назначения как используют питон то будет тоже самое если не хуже ибо luajit (lua5.1+пости lua5.2),lua5.2,lua5.3,lua5.4 и всё это в каше и всё несовместимо, байт код не совместим плюс ещё форки парчка. Но «не баг, а фича» луа дефакто всегда встроенный так что что встроил с тем и живёшь, беды с башкой начинаются когда хочешь взять библиотеку, а она на 5.3+ с операциями битовыми ААААААААААААААААААААА 😀

LINUX-ORG-RU ★★★★★
( 27.03.23 13:07:59 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от LINUX-ORG-RU 27.03.23 13:07:59 MSK

Ну питон можно встроить, но он потянет за собой внешние питоньи либы…

У нас одна из канонических архитектур это питоний пускач в котором ворочается плюсовая сошка, биндинг через SWIG. Интерфейс на питоне пишется куда приятнее чем на плюсах, все кучеряво пока есть питоньи хидеры… ;-(

PS бонус питона — он просто учится и его почти все знают. С lua не так;-)

AntonI ★★★★
( 27.03.23 13:13:52 MSK )
Последнее исправление: AntonI 27.03.23 13:14:41 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от Leo_Skil 27.03.23 13:02:57 MSK

Вот вам для наглядности представление десятичного числа из статьи в википедии:

421 = 4 · 10² + 2 · 10¹ + 1 · 10⁰ 

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

Прочитайте уже про позиционные системы счисления.

vvn_black ★★★★★
( 27.03.23 13:15:59 MSK )

  • Ответить на это сообщение
  • Ссылка

#!/usr/bin/python # # depth from 0, -1 for the first digit # def digit_of_number(number, depth=-1): if (number<10) or (depth == 0): return number%10 else: return digit_of_number(number//10, depth-1) # test a = 12345 print("In: ", a) # print("Out 0: ", digit_of_number(a, 0)) print("Out 1: ", digit_of_number(a, 1)) print("Out 2: ", digit_of_number(a, 2)) print("Out 3: ", digit_of_number(a, 3)) print("Out 4: ", digit_of_number(a, 4)) print("Out 5: ", digit_of_number(a, 5)) print("Out -1: ", digit_of_number(a, -1)) print("Out ", digit_of_number(a) ) 
In: 12345 Out 0: 5 Out 1: 4 Out 2: 3 Out 3: 2 Out 4: 1 Out 5: 1 Out -1: 1 Out 1 

futurama ★★★★★
( 27.03.23 13:39:05 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

В python3 решили что это источник ошибок и стало 3/2=1.5

так в матлабе. Хотя, целочисленное деление там idivide(A,B), что м.б. еще менее удобоваримо, чем //

seiken ★★★★★
( 27.03.23 13:40:01 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от seiken 27.03.23 13:40:01 MSK

Матлаб все таки очень нишевая вещь, я за 25 лет написания числодробилок работал с ним только один раз. ЯП общего назначения испольщуются гораздо чаще чем матлаб. Я слышал что в каких то новомодных ЯП тоже 3/2=1.5, но все таки это ИМНО изврат.

Хотя новички о целочисленное деление больно и регулярно бьются, это правда.

AntonI ★★★★
( 27.03.23 14:05:43 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от futurama 27.03.23 13:39:05 MSK

Ой скока букоф… забудьте же про stdin для ввода параметров! Да и остальное лишнее.

#!/usr/bin/python3 import sys for x in sys.argv[1:]: if not x.isdigit(): print('incorrect', x); continue print(x, '=', ' + '.join(c+'*10**%i'%p for p, c in enumerate(reversed(x)))) 

AntonI ★★★★
( 27.03.23 14:15:05 MSK )
Последнее исправление: AntonI 27.03.23 14:16:40 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Если метод непринципиален, то можно разбить, как строку

#!/usr/bin/pwsh $nn = [uint64]::MaxValue -split '(?!\b)' for ($i = 0; $i -lt $nn.count; $i++) < ': ' -f $i, $nn[$i] > 
 0: 1 1: 8 # 2..17 18: 1 19: 5 

dmitry237 ★★★
( 27.03.23 15:32:21 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 14:15:05 MSK

Ты о чем вообще? Болеешь?

futurama ★★★★★
( 27.03.23 16:02:13 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от uwuwuu 27.03.23 12:00:40 MSK

Спасибо всем, кто отозвался

Leo_Skil
( 27.03.23 16:40:04 MSK ) автор топика

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от futurama 27.03.23 16:02:13 MSK

Я о Вашем коде. Вы циклы в школе еще не проходили? Ну ничего, все впереди.

Про stdin я виноват, не туда посмотрел.

AntonI ★★★★
( 27.03.23 18:26:12 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 18:26:12 MSK

Циклы? Что это? Рекурсию знаю, даже хвостатую, вроде.

futurama ★★★★★
( 27.03.23 22:43:51 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от futurama 27.03.23 22:43:51 MSK

Это то во что может быть развёрнута рекурсия. И это работает быстрее, хотя питон не про скорость.

Но ещё длина цикла ограничена временем, а вот глубина рекурсии ограничена стеком…

AntonI ★★★★
( 27.03.23 23:17:51 MSK )

  • Ответить на это сообщение
  • Ссылка

Так алгоритм непонятен или реализация не получается?

Если таки первое, предлагаю для начала осмыслить, что вообще такое цифра в позиционной (в частности, десятичной) системе счисления. А это по сути коэффициент при основании системы счисления в определённой степени. Все цифры образуют многочлен, степень которого определяется количеством цифр. То есть:

1326 = 1*10**3 + 3*10**2 + 2*10**1 + 6+10**0 

Взяв остаток от деления на 10, получим последнюю цифру, взяв остаток от деления на 100 и поделив на 10 — вторую справа и так далее.

Ну а дальше уже да, питонячья специфика начинается, про это в комментариях уже написали.

hobbit ★★★★★
( 27.03.23 23:29:20 MSK )
Последнее исправление: hobbit 27.03.23 23:30:23 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

И эти люди запрещают мне ковыряться в носу… Ужас.

А вроде как начиная с Python 3.5 можно явно объявлять типы. Что, если явно объявленное целое 3 разделить на столь же явное объявленное целое 2 — реально получается вещественный результат? Как же хорошо, что я не на питоне пишу…

hobbit ★★★★★
( 27.03.23 23:35:22 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от hobbit 27.03.23 23:35:22 MSK

Вроде можно типы объявлять, но я этим не пользуюсь. У меня уже есть плюсы где типы обьявляют:-) Я на третий то питон недавно частично перешёл, очень много старого кода на втором который не удаётся перетащить на третий.

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

И объявление типов не спасает, у них просто int/int==>float. Потому что неофиты страдают когда int/int==>int.

AntonI ★★★★
( 28.03.23 08:29:56 MSK )

  • Ответить на это сообщение
  • Ссылка

Анализ алгоритма

Если число отрицательное, то поменяем его знак, сделав его положительным – от этого первая цифра не изменится. Делим число на 10 до тех пор, пока не останется в нем одна цифра – это и будет первая цифра исходного числа.

Читаем целое число n.

Если число отрицательное, то сделаем его положительным.

Делим число на 10, пока оно не будет содержать только первую цифру.

Выводим первую цифру числа.

Java р еализация

import java.util.*;

public class Main

public static void main(String[] args )

Scanner con = new Scanner(System. in );

long n = con .nextLong();

while ( n > 9)

System. out .println( n );

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

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