使用while循环计数数字

时间:2011-07-06 19:04:57

标签: c++ while-loop digits counting

我最近制作的程序需要检查用户输入的数字中的位数。结果我做了以下代码:

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

据我所知(即使我的经验有限),它看起来粗糙而且相当不优雅。

有没有人知道如何改进此代码(而不使用内置的c ++函数)?

7 个答案:

答案 0 :(得分:12)

在您的特定示例中,您可以将数字作为字符串读取并计算字符数。

但是对于一般情况,您可以按照自己的方式进行操作,也可以使用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;
}

答案 1 :(得分:5)

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

答案 2 :(得分:2)

您可以将用户输入作为字符串读取,然后对字符进行计数? (消毒和修剪后等)。

或者,你可以找一个图书馆为你做艰苦的工作;将值转换回字符串,然后计算字符:

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

答案 3 :(得分:1)

如果x是一个整数,并且“内置函数”你不排除对数,那么你可以做

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

答案 4 :(得分:1)

给定一个带有条件移动的非常流水线的cpu,这个例子可能更快:

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次迭代。

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

禁止将数字作为字符串读取,您当前计算有效小数位数的方法很好。你可以缩短它,但这可能不太清楚(增加了一组括号以防止gcc发出警告):

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