如何计算C中数字的位数?

时间:2018-01-02 11:30:45

标签: c loops count

我一直在努力解决这个问题,即计算数字的总数,我的代码部分工作。它适用于第一次尝试,但在第二次尝试中,计数增加了先前的计数。请帮忙。

#include<stdio.h>
int main()
{
    int num,x,i,n,count=0;
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        scanf("%d",&num);
        while(num!=0)
        {
            count++;
            num=num/10;
        }
        printf("%d\n",count);
    }
    return 0;
}

4 个答案:

答案 0 :(得分:5)

您的代码有两个问题:

  • 它永远不会重置count
  • 它没有正确处理零,说0有零位数

第一个问题的原因之一是您不限制变量的范围,事先声明所有变量。相反,您应该在需要它们的最紧密的范围内声明它们:i应该在循环标头中声明,而count应该在for循环内声明和初始化。

对于零处理,添加一个特殊情况,在输入零时打印1,或切换到do / while循环。

答案 1 :(得分:1)

  

计数加上先前的计数。

(重新)在开始(结束)之前将其设置为0

for (i = 1; i <= n; i++)
{
  count = 0;

commented作为StoryTeller,更清晰的方法是在需要的范围内定义变量:

#include <stdio.h>

int main(void)
{
  int n = 0; /* Have it initialised, just in case scanf() fails. */
  scanf("%d", &n);

  for (int i = 1; i <= n; i++)
  {
    int num = 0; /* Have it initialised, just in case scanf() fails. */
    scanf("%d", &num);

    /* Scope of counting: */
    {
      int count = 0;

      while (num != 0)
      {
        count++;
        num = num / 10;
      }

      printf("%d\n", count);
    }
  }

  return 0;
}

答案 2 :(得分:0)

您需要在每个循环中将count重置为0

此代码应该可以正常工作:

#include<stdio.h>
int main()
{
int num,x,i,n;
scanf("%d",&n);

for(i=1;i<=n;i++)
{
    int count=0; // rest the count on each loop
    scanf("%d",&num);
    while(num!=0)
    {
        count++;
        num=num/10;
    }
    printf("%d\n",count);


 }
    return 0;
}

答案 3 :(得分:0)

如果要计算十进制数字,可以尝试以下操作:

#include<stdio.h>

long count_digits(long number) {
  return number >= 10 ?
    count_digits(number/10) + 1
    : 1;
}

int main()
{
    long num = 123456789;
    long num2 = 1234567891234567888;
    printf("%d\n", count_digits(num));
    printf("%d\n", count_digits(num2));
    return 0;
}

输出:

9 19