Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 179, средняя оценка - 4.66
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
#1

Как узнать длину числа? - C++

02.05.2010, 11:46. Просмотров 25240. Ответов 44
Метки нет (Все метки)

Всем привет Интересует такой вопрос: как можно узнать длину числа(колличество цифр в нём)? Т.е. записать длину в отдельную переменную. К примеру a = 124; и как скажем в переменную buf занести тогда число 3 и т.д.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2010, 11:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как узнать длину числа? (C++):

Как узнать длину массива - C++
например объявил массив char x, ввел в него gets(x), теперь в массиве строка, но как узнать длину этой строки length(x) не работает

Как узнать длину массива? - C++
Функция в качестве параметра получает массив BYTE*. Как узнать его длину?

Узнать длину строки и длину каждого слова - C++
есть код который реверсирует слова в строке. Как узнать длину слова(например 3 слова ) и количество символов ? #include...

Как узнать длину указателя (в байтах)? - C++
как узнать длину указателя(в байтах) sizeof(указатель)почему то не работает?

Как узнать длину строки TCHAR? - C++
Как узнать длину строки? TCHAR szText = _T(""); Добавлено через 1 минуту 1 IntelliSense: идентификатор "_tsclen" не...

Как узнать длину строки, содержащей кириллицу? - C++
Сделал такой код #include <string> #include <iostream> int main (int argc, char * argv){ std::string test="проверка"; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
02.05.2010, 11:54 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <conio.h>
int main(){
int numb = 0;
int count = 0; 
printf("input numb\t");scanf("%d",&numb);
while(numb){
numb/=10;
count++;
}
int n = count;
printf("count numbers %d",n);
printf("\n");
return 0;
}
1
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
02.05.2010, 11:57 #3
Делить на 10, пока остаток от деления не будет равен 0.
2
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
02.05.2010, 12:01  [ТС] #4
Всем спасибо))
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
02.05.2010, 12:10 #5
А сделать из числа строку и просто длину строки вывести не проще?
0
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
03.05.2010, 02:59 #6
Manjak, Согласен
0
Vorona
03.05.2010, 03:06
  #7

Не по теме:

можно еще вывести на экран и посчитать на сколько знаков сместилась каретка ввода

0
Norby
65 / 65 / 2
Регистрация: 12.03.2008
Сообщений: 392
03.05.2010, 03:18 #8
Цитата Сообщение от Vorona Посмотреть сообщение

Не по теме:

можно еще вывести на экран и посчитать на сколько знаков сместилась каретка ввода

Не по теме:

Это для изврещенных умов ассемблероманов

0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.05.2010, 08:35 #9
Цитата Сообщение от Manjak Посмотреть сообщение
А сделать из числа строку и просто длину строки вывести не проще?
Сначала перевести в строку, потом посчитать ее длину. Чем же проще, то?
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
03.05.2010, 10:19 #10
В чем проблема?
C
1
2
3
4
5
    char buffer[65];
    int r = 12345;
    int base = 10;
    _itoa_s( r, buffer, base );
    printf( "base %d: %s (%d chars)\n", base, buffer, strnlen(buffer, _countof(buffer)) );
1
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
03.05.2010, 11:28 #11
Manjak:
Проще: если есть примочка в виде библиотечного велосипеда.
В плане того что твое предложение быстрее я сомневаюсь,
но в принципе тут скорость не особо важна.
1
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
03.05.2010, 11:38 #12
Не всегда в быстродействии счастье Код в первую очередь должен быть понятным.
Конечно, там можно и побыстрее сделать, например, не использовать safe функции.
0
easybudda
Модератор
Эксперт CЭксперт С++
9628 / 5576 / 947
Регистрация: 25.07.2009
Сообщений: 10,712
03.05.2010, 11:45 #13
Цитата Сообщение от Manjak Посмотреть сообщение
А сделать из числа строку и просто длину строки вывести не проще?
У этого способа есть ещё один тонкий момент - если число отрицательное, нужно либо удалять первый символ, либо отнимать единицу от результата, ну или ещё как-нибудь выкручиваться. Если на этом не заморачиваться, то можно вот так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <sstream>
 
int main(){
    unsigned long num;
    std::cout << "Number: ";
    std::cin >> num;
    std::ostringstream ost;
    ost << num;
    std::cout << ost.str().size() << " digits." << std::endl;
    
    return 0;
}
0
Evg
Эксперт CАвтор FAQ
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
03.05.2010, 11:46 #14
Цитата Сообщение от Manjak Посмотреть сообщение
Не всегда в быстродействии счастье Код в первую очередь должен быть понятным.
Скажем так, нужно просто чётко разделять те места, где код должен быть быстрым, а где необязательно. Постановка задачи из данной темы маловероятно нужна в кодах, критичных к производительности. Однако код через деление выглядит прсотым до банальности, а потому я бы выбрал именно его
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.05.2010, 11:50 #15
Цитата Сообщение от Evg Посмотреть сообщение
Однако код через деление выглядит прсотым до банальности, а потому я бы выбрал именно его
Он еще по результатам теста в среднем в два раза быстрее на моей машине.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
 
int DigitCountGeniusIgnat(int number) {
  int result = 0;
  
  while (number != 0) {
    number /= 10;
    result++;
  }
 
  return result;
}
 
int DigitCountManjak(int number) {
  char buffer[65];
  int base = 10;
 
  itoa(number, buffer, base);
 
  return strnlen(buffer, _countof(buffer))
}
 
typedef int (*func_ptr)(int);
 
double Duration(const int* arr, int size, func_ptr func) {
  const std::clock_t start = std::clock();
 
  for (int i = 0; i < size; ++i)
    int count = func(arr[i]);
 
  const std::clock_t finish = std::clock();
 
  return static_cast<double>(finish - start) / CLOCK_PER_SEC;
}
 
int main() {
  const int  size = 1000000;
        int* arr  = new int[size];
 
  std::generate(arr, arr + size, std::rand());
 
  std::cout << "DigitCountGeniusIgnat duration: " << Duration(arr, size, DigitCountGeniusIgnat) << std::endl;
  std::cout << "DigitCountManjak duration: "      << Duration(arr, size, DigitCountManjak     ) << std::endl;
  
  return 0;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2010, 11:50
Привет! Вот еще темы с ответами:

Как в теле функции узнать длину передаваемого ей массива? - C++
Здравствуйте. Как могу в теле функции узнать длину передаваемого массива (для тела цикла)? Спасибо. #include &quot;stdafx.h&quot; #include...

Как узнать есть ли в массиве одинаковые числа и как найти эти числа ? - C++
Всем привет ,можете помочь как узнать есть ли в массиве одинаковые числа и как найти эти числа . Например массив с элементами 1 4 4 0 2 ....

Узнать длину границы - C++
Граница В международной политике важным понятием является граница между государствами. Нечеткое понимание сторонами того, где проходит...

Узнать длину строкового массива - C++
char s1; cout &lt;&lt; strlen(s1) &lt;&lt; endl; // Выдаёт 62 вместо 26| Как узнать char s2;// | правильный ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.05.2010, 11:50
Ответ Создать тему
Опции темы

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