Программа которая определяет количество цифр в числе

: 7

Программа на Си определить количество цифр

Дано натуральное число 3456786 определить количество его цифр кратных d=2(задается в программе).

Белик Виталий 🙂

: 57,792

http://www.programmersforum.ru/showthread.php?t=104462
Годится для начала?

I’m learning to live.

: 7

#include #include int schet(int n) < int count = 1; while ( n = n / 10 ) count++; return count; >int main()

Какую строчку изменить чтобы считало количество цифр кратных d=2?

: 7

http://www.programmersforum.ru/showthread.php?t=104462
Годится для начала?

Спасибо большое, разобралась!

Участник клуба

: 1,849

#include int main() < int n,z,count=0; scanf(«%d %d»,z); while (n!=0) < count+= (((n % 10) % z) == 0) ; n /= 10; >printf(«n%d»,count); return 0; >

на этом тесте проверил только)

from dark to light)

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить количество цифр и малых латинских букв в строке Waise Помощь студентам 1 22.04.2015 19:18
В С++ определить количество цифр в числе, являющихся квадратами некоторого числа mmf_Valya Помощь студентам 1 20.10.2012 19:13
Определить, какое количество цифр числа надо исправить, чтобы исправленное совпадало с обращенным к заданному числу M Krusad Паскаль, Turbo Pascal, PascalABC.NET 2 08.10.2012 12:54
Определить: количество цифр в тексте irek01 Visual C++ 3 26.05.2012 18:17
Pascal.Определить к-количество трехзначных натуральных чисел,сумма цифр которых n (n=13). naty7773 Помощь студентам 2 11.01.2012 16:43

Нахождение кол-ва цифр в числе С++

Источник: www.programmersforum.ru

Как узнать из скольки цифр состоит число (без перевода в строку )?

Как узнать из скольки цифр состоит число на пример 456 ?
Да можно перевести в строку и там уже узнать с помощью len() и тд..
А как сделать без перевода в строку?

  • Вопрос задан более двух лет назад
  • 289 просмотров

1 комментарий

7.5 Одинаковые цифры «Поколение Python»: курс для начинающих. Курс Stepik

Простой 1 комментарий

HemulGM

Учти, что решение через математику будут медленнее (как ни странно), чем через строку, особенно если число длинное.

Решения вопроса 2

LaRN

Senior Developer
По идее через десятичный логарифм можно:
x = 456
n = int(math.log10(x)) + 1
print(n)
Ответ написан более двух лет назад
Комментировать
Нравится 2 Комментировать

danila763

Учу python, sql

с ходу в голову приходит только:
num = 456
counter = 0
while num > 0:
num //= 10
counter += 1
print(counter)

Ответ написан более двух лет назад
Нравится 1 13 комментариев
Первый раз вижу знак // , что он делает?
kaktak255, целочисленное деление

yupiter7575

Теперь ответ из категории дебильных. Вы слышали про цикл for?

danila763

Yupiter7575, а что в данном случае им перебирать?

yupiter7575

Даниил Шевкунов, Может быть строку данную в условии? Тем более ваше решение не будет работать с отрицательными числами и дробями. А там где будет работать, будет медленно, потому что while

yupiter7575

Даниил Шевкунов, Ну вот как пример:

>>> def getCol(num): . return [i for i, val in enumerate(str(num).replace(‘.’, »).replace(‘-‘, »))][-1] + 1 . >>> getCol(-123) 3 >>> getCol(123) 3 >>> getCol(12.3434) 6

MinTnt

Yupiter7575, это всё равно преобразования числа в строку, и последующее использование уже не числа а строки.

MinTnt

kaktak255, ну а вообще, все числа можно расписать по типу:

456.12 = 4*10^2 + 5*10^1 + 6*10^0 + 1*10^-1 + 2*10^-2

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

Читайте также:
В чем различие между операционной системой и прикладными программами

a = -52 print(a.__abs__())

yupiter7575

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

MinTnt

говорить по факту

Есть факт использования str(), далее через enumerate мы просто проходим по строке как по списку, делая дополнительно нумерацию, и выбирая последний элемент.
Но опять же, это преобразование в строку, что нарушает условие вопроса. Да и при этом, раз уже преобразовали в строку, использование цикла лишь делает лишнюю нагрузку.

yupiter7575

MinTnt, Я все равно не понимаю одной вещи, зачем автор вопроса не хочет использовать str? Если он вставит эту функцию куда нибудь в func.py, а потом импортирует, то str он не заметит. Функция будет принимать число и возвращать число.
А если нужно без нагрузки — len(str(num))

MinTnt

Yupiter7575, С этим согласен. Так как после преобразования в строку, её длину по-символьно посчитать проще, да и быстрее чем различные иные попытки циклами.

Но этот вопрос скорее из ряда «Алгоритмы». Т.е. Вопрос скорее в том, какие есть математические алгоритмы, чтоб узнать сколько у него цифр.

fixator10

Мне кажется не стоит, особенно новичкам, советовать выполнять «магические» методы. Для получения значения данного метода существует функция abs() :

a = -52 print(abs(a))
Ответы на вопрос 1

yupiter7575

Python программист

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

a = 1234 a_lenght = len(str(a))
Ответ написан более двух лет назад
Потому что интересны и другие варианты решения

yupiter7575

Я умею решать элементарную задачу

Решать более сложные задачи я не хочу

Я хочу делать элементарную задачу через жопу

First_Spectr

Есть задача, наверное автору виднее, почему он хочет именно такое решение.

yupiter7575

Сергей Шиловский, и? Вам то какое дело? Автор вопроса пришел на тостер, чтобы получить помощь и знания. Я дал автору знание о том как лучше решить эту задачу.

First_Spectr

Yupiter7575, вы не думали что ваш ответ слишком очевиден, чтобы автор о нём не знал, если даже в заголовке вопроса есть жирнющий намёк на это?

yupiter7575

Сергей Шиловский, Прочитайте внимательно ответ, потом пишите

First_Spectr

Yupiter7575, может я слепой, но ваш ответ прямо в вопросе есть:

Да можно перевести в строку и там уже узнать с помощью len() и тд..

yupiter7575

Сергей Шиловский, С чем вы хотите спорить? Вопрос написал самоучка, который посмотрел один видос в интернете и начал здесь выпендриваться на тему «Как лучше сделать, если мне так не нравится». Если вам тоже нравится писать говнокод — пожалуйста ваше решение. Я предложил самый оптимальный и удобный вариант, если автору он не подходит — сверху есть еще решения.

Источник: qna.habr.com

Операторы управления

ЗАДАЧА 3.14. Дано натуральное число N. Определить, является ли оно простым. Натуральное число Nназывается простым, если оно делится нацело без остатка только на единицу и N. Число 13 — простое, так как делится только на 1 и 13, N = 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.

Читайте также:
Kingston ssd manager как пользоваться программой

Входные данные: N — целое число.

Выходные данные: сообщение.

Промежуточные данные: i — параметр цикла, возможные делители числа N .

Алгоритм решения этой задачи (рис. 3.33) заключается в том, что необходимо определить, есть ли у числа N делители среди чисел от 2 до N/2 . Если делителей нет — число простое. Предположим, что число N является простым ( Pr:=true ). Организуем цикл, в котором переменная i будет изменяться от 2 до N/2 . В цикле будем проверять, делится ли N на i . Если делится, то мы нашли делитель, N не является простым ( Pr:=false ). Проверка остальных делителей не имеет смысла, аварийно покидаем цикл.

Алгоритм определения простого числа


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

В алгоритме предусмотрено два выхода из цикла. Первый — естественный, при исчерпании всех значений параметра, а второй — досрочный. После выхода из цикла надо проверить значение Pr . Если Pr=true , то число N — простое, иначе N не является простым числом.

При составлении программы на языке Free Pascal досрочный выход из цикла удобно выполнять при помощи оператора break :

var N, i : integer; Pr : boolean; begin write ( ’N= ’ ); readln (N); Pr:= true; for i :=2 to N div 2 do if N mod i = 0 then begin Pr:= false; break; end; if Pr then writeln ( ’Число ’,N, ’ — простое ’ ) else writeln ( ’Число ’,N, ’ простым не является ’ ); end.

ЗАДАЧА 3.15. Определить количество простых чисел в интервале от Nдо M, где Nи M— натуральные числа, причем N le M.

Алгоритм решения данной задачи представлен на рис. 3.34.

Обратите внимание, что здесь осуществляется проверка корректности ввода исходных данных. Если границы интервала не положительны, или значение N превышает M , ввод данных повторяется в цикле с постусловием до тех пор, пока не будут введены корректные исходные данные. Далее для каждого числа из указанного интервала (параметр i принимает значения от N до M ) происходит проверка. Если число является простым, то переменная k увеличивается на единицу. Подробно определение простого числа описано в задаче 3.14.

Программа на языке Free Pascal, реализующая алгоритм подсчёта количества простых чисел в заданном диапазоне:

var N,M, i, j, k : longint; Pr : boolean; begin repeat write ( ’N= ’ ); readln (N); write ( ’M= ’ ); readln (M); until (N>0) and (M>0) and (N for i :=N to M do begin Pr:= true; for j :=2 to i div 2 do if i mod j = 0 then begin Pr:= false; break; end; if Pr then k:=k+1; end; if k=0 then writeln ( ’Простых чисел в диапазоне нет ’ ) else writeln ( ’Простых чисел в диапазоне ’, k ); end.

Алгоритм определения простых чисел в заданном интервале


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

N

ЗАДАЧА 3.16. Дано натуральное число . Определить количество цифр в числе.

Читайте также:
Как очистить телефон от вредоносных программ

Входные данные: N — целое число.

Выходные данные: kol — количество цифр в числе.

Промежуточные данные: M — переменная для временного хранения значения N .

Для того чтобы подсчитать количество цифр в числе, необходимо определить, сколько раз заданное число можно разделить на десять нацело. Например, пусть N=12345 , тогда количество цифр kol = 5 . Результаты вычислений сведены в таблицу 3.8. Алгоритм определения количества цифр в числе представлен на рис. 3.35.

Таблица 3.8. Определение количества цифр числа kol N
1 12345
2 12345 div 10=1234
3 1234 div 10=123
4 123 div 10=12
5 12 div 10=1
1 div 10=0

Текст программы, реализующей данную задачу, можно записать так:

var M,N: longint; kol : word; begin repeat write ( ’N= ’ ); readln (N); until N>0; M:=N; kol : = 1; while M div 10 > 0 do begin kol := kol +1; M:=M div 1 0; end; writeln ( ’ kol= ’, kol ); end.

Алгоритм определения количества цифр в числе


увеличить изображение
Рис. 3.35. Алгоритм определения количества цифр в числе

N

ЗАДАЧА 3.17. Дано натуральное число . Определить, содержит ли это число нули и в каких разрядах они расположены (например, число 1 101 111 011 содержит ноль в третьем и восьмом разрядах).

Входные данные: N — целое число.

Выходные данные: pos — позиция цифры в числе.

Промежуточные данные: i — параметр цикла, M — переменная для временного хранения значения N .

В связи с тем, что разряды в числе выделяются, начиная с последнего, то для определения номера разряда в числе, необходимо знать количество цифр в числе12 12 Алгоритм нахождения количества цифр в числе был рассмотрен в предыдущей задаче. . Таким образом, на первом этапе решения задачи необходимо определить kol — количество цифр в числе. Затем начинаем выделять из числа цифры; если очередная цифра равна нулю, нужно вывести на экран номер разряда, который занимает эта цифра. Процесс определения текущей цифры числа N=120405 представлен в таблице 3.9.

Блок-схема алгоритма решения данной задачи показана на рис. 3.36.

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


Рис. 3.36. Алгоритм решения задачи 3.17

Таблица 3.9. Определение текущей цифры числа i Число М Цифра Номер позиции
1 120405 div 10=12040 120405 mod 10=5 6
2 12040 div 10=1204 12040 mod 10=0 5
3 1204 div 10=120 1204 mod 10=4 4
4 120 div 10=12 120 mod 10=0 3
5 12 div 10=1 12 mod 10=2 2
6 1 div 10=0 1 mod 10=1 1

Текст программы, реализующей данный алгоритм:

var M,N: longint; i, pos, kol : word; begin repeat write ( ’N= ’ ); readln (N); until N>0; //Определение kol — количества разрядов. M:=N; kol : = 1; while M div 10 > 0 do begin kol := kol +1; M:=M div 1 0; end; writeln ( ’ kol= ’, kol ); M:=N; pos : = 0; for i :=1 to kol do begin if (M mod 10 = 0) then begin pos := kol-i +1; writeln ( ’Ноль в ’, pos, ’м- разряде. ’ ); end; M:=M div 1 0; end; if pos=0 then writeln ( ’Число не содержит цифру 0. ’ ); end.

Источник: intuit.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru