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

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

int x;    
cout << "Enter a number: ";
cin >> x;
x /= 10;
while(x > 0)
{
  count++;
  x = x/10;
}

насколько я могу судить (даже с моим ограниченным опытом), что кажется сырой и довольно unelegant.

есть ли у кого-нибудь идея о том, как улучшить этот код (не используя встроенную функцию c++)?

7 ответов


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

но в общем случае вы можете сделать это по-своему или использовать логарифм base-10.

вот пример логарифма:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    double n;
    cout << "Enter a number: ";
    cin >> n;

    cout << "Log 10 is " << log10(n) << endl;
    cout << "Digits are " << ceil(log10(fabs(n)+1)) << endl;
    return 0;
}

int count = (x == 0) ? 1 : (int)(std::log10(std::abs((double)(x)))))) + 1;

вы можете прочитать пользовательский ввод как строку, а затем подсчитать символы? (После дезинфицировать и уравновешивать, etc.)

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

cin >> x;
stringstream ss;
ss << x;
int len = ss.str().length();

Если x является целым числом, и по "встроенной функции" вы не исключаете логарифмы, то вы могли бы сделать

double doub_x=double(x);
double digits=log(abs(doub_x))/log(10.0);
int digits= int(num_digits);

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

if (x > 100000000) { x /= 100000000; count += 8; }
if (x > 10000) { x /= 10000; count += 4; }
if (x > 100) { x /= 100; count += 2; }
if (x > 10) { x /= 10; count += 1; }

как он полностью развернут. Хороший компилятор также может развернуть цикл while максимум до 10 итераций.


#include<iostream>
using namespace std;
int main()
{
int count=0;
    double x;
    cout << "Enter a number: ";
    cin >> x;
    x /= 10;
    while(x > 1)
    {
      count++;
      x = x/10;
    }
    cout<<count+1;
}

Bar предложения чтения числа в виде строки, ваш текущий метод подсчета количества значимых десятичных цифр в порядке. Вы могли бы сделать его короче, но это может быть, возможно, менее ясно (дополнительный набор скобок добавлен, чтобы удержать gcc от выдачи предупреждений):

while((x = x/10))
  count++;