вычисление количества цифр целого введенного числа
Программа вычисляет количество цифр введенного числа. Вводим число (например 123), что же происходит дальше. Выражение num1/=10; делит число на 10 (123/10=12, дробная часть отбрасывается), произошла одна итерация, опять делит число на 10 (12/10=1, дробная часть отбрасывается), произошла вторая итерация. Опять делит число на 10 (1/10=0, дробная часть отбрасывается), произошла третья итерация. 0,1 не делит, так как переменная имеет целочисленный тип. Поэтому, на самом деле выводится не количество цифр, а количество итераций. Если ввести вещественное число (например 12,35), получится 47 итераций.
Как посчитать количество цифр в числе (число начинается на ноль)
Просто потому что если читать не строку, а число — то введете вы 00094 или 94 — в вашем x будет одно и то же число.
Отслеживать
ответ дан 12 дек 2019 в 14:36
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
А как тогда после из него «взять» первую, вторую и последующие цифры? Мне вот например нужно чтобы цифры на парных местах додавались, на непарных перемножались и этого всего найти суму.
12 дек 2019 в 14:42
x[0] — первая цифра (как символ! чтобы получить ее числовое значение, нужно вычитать символ ноля — x[0]-‘0’ ), x[1] — вторая и так далее.
12 дек 2019 в 15:02
Как я понимаю это массив, но как вычитать символ ноля я так и не понял.
12 дек 2019 в 15:34
Я же написал: x[0]-‘0’ . Просто перенести в свой код можете? Выделить, Ctrl-C, Ctrl-V?
12 дек 2019 в 15:37
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как вывести количество чисел в c
Определить количество чисел в строке c++
#include "stdafx.h" #include #include #include #include using namespace std; int main() < FILE *f; f=fopen("C:\\text.txt","r"); int x, n=4, s=0, k[100], i=1, t; while(!feof(f)) < fscanf(f,"%i",&x); k[i]=x; t=i; i++; >for(i=1; i cout
Собственно программа должна находить сумму чисел главной диагонали матрицы, которая находится в файле. С этим она успешно справляется но:
1)нужно определить её порядок для переменной ‘n’ чтобы в ручную её не задавать.
2)так же нужно\можно сделать динамическим массив k[]
Форумчанин
Регистрация: 03.10.2010
Сообщений: 321
Не понятно зачем вы используете C вместе с С++, они совместимы, однако имеют разные подходы.
Можно задавать размер массива перед самим массивом
| ФАЙЛ 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Или использовать контейнеры.
#include #include #include #include using namespace std; int main() < vectorarr; //Наш массив int n=0; //"Сторона" матрицы int sum=0; //Искомая сумма ifstream file; file.open("1.txt"); int temp; //Считываем количество элементов в первой строке и будем далее опираться на него while(!file.eof()) < file>>temp; arr.push_back(temp); > n = sqrt(arr.size()); file.close(); for(int i=0; i cout
Этот код рабочий только для квадратных матриц
Количество цифр
Время от времени перед программистом стает задача нахождения количества цифр в числе. Есть много способов решения этой задачи. В статье мы рассмотрим наиболее популярные из них.
Длина строки
Это очень простой вариант определения количества цифр, заключается в переводе числа в строковое представление с последующим определением длины строки.
public int CountDigitByString(int n) < return Math.Abs(n).ToString().Length; >
Такой метод компактный и интуитивно понятный, однако он сильно проигрывает в быстродействии другим вариантам.
Десятичный логарифм
Использование десятичного логарифма для определения количества цифр в числе, позволяет производить вычисление за линейное время.
public int CountDigitsByLog10(int n) < return (n == 0) ? 1 : (int)Math.Log10(Math.Abs(n)) + 1; >
Сравнение
Самый быстрый из приведенных методов.
private static readonly int[] Numbers = new [] < 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 >; public int CountDigitsByCompare(int n) < n = Math.Abs(n); for (var i = 0; i < Numbers.Length; i++) < if (n < Numbers[i]) < return i + 1; > > return 10; >
Деление нацело
С использованием цикла
public int CountDigitsByDiv(int n) < var count = (n == 0) ? 1 : 0; while (n != 0) < n /= 10; count++; > return count; >
Рекурсивно
public int CountDigitsByDivRecursive(int n) < return (n 9) ? 1 : CountDigitsByDivRecursive(n / 10) + 1; >
Разбивка числа на отдельные цифры
Разбив число на отдельные цифры, мы получаем возможность нахождения:
- количества цифр;
- количества четных и нечетных;
- количества различных(уникальных) цифр числа;
- суммы цифр числа.
public Listint> IntToDigit(int n) < n = Math.Abs(n); var digits = new Listint>(); while (n > 0) < int digit = n % 10; n /= 10; digits.Add(digit); > return digits; >
Количество четных
public int EvenCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 == 0) < count++; >> return count; > //сокращенная форма записи с использованием Linq public int EvenCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 == 0); >
Количество нечетных
public int OddCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 != 0) < count++; >> return count; > public int OddCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 != 0); >
Количество различных цифр в числе
public int CountUniqueDigits(int n) < var a = new int[9]; foreach (var d in IntToDigit(n)) < a[d]++; >var countUnique = 0; foreach (var x in a) < if (x > 0) < countUnique++; >> return countUnique; >
Сумма цифр числа
public int SumDigits(int n) < var sum = 0; foreach (var d in IntToDigit(n)) < sum += d; >return sum; > //использование Linq сокращает запись public int SumDigitsLinq(int n) < return IntToDigit(n).Sum(); >