Counting digits using while loop

血红的双手。 提交于 2019-11-30 20:20:09

In your particular example you could read the number as a string and count the number of characters.

But for the general case, you can do it your way or you can use a base-10 logarithm.

Here is the logarithm example:

#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;

You could read the user input as a string, and then count the characters? (After sanitising and trimming, etc.)

Alternatively, you could get a library to do the hard work for you; convert the value back to a string, and then count the characters:

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

If x is an integer, and by "built in function" you aren't excluding logarithms, then you could do

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

Given a very pipelined cpu with conditional moves, this example may be quicker:

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; }

as it is fully unrolled. A good compiler may also unroll the while loop to a maximum of 10 iterations though.

#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 the suggestions of reading the number as a string, your current method of counting the number of significant decimal digits is fine. You could make it shorter, but this could arguably be less clear (extra set of parenthesis added to keep gcc from issuing warnings):

while((x = x/10))
  count++;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!