【问题标题】:How to count digits of numbers in C?如何计算C中数字的位数?
【发布时间】:2018-06-12 02:42:16
【问题描述】:

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

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

【问题讨论】:

  • 您需要重置count
  • 在处理每个新号码之前,您需要将count 重置为0。就目前而言,您将其设置为0 一次,然后再也不会。所以它当然会不断增长。
  • @chux 好的,然后我混淆了选项卡....当时我在其他一些 sn-p 中看到了数组,并将这个问题与这个问题混淆了。道歉。

标签: c loops count


【解决方案1】:

计数与先前计数相加。

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

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

作为StoryTellercommented,一种更简洁的方法是在需要它们的范围内定义变量:

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

【讨论】:

  • 更好的是,限制它的范围。
  • @StoryTeller:嗯,是的,有道理,但它仍然需要(重新)设置,然后初始化。
  • 是的,但我发现本能地将范围限制为默认值会使这些问题...很少见。
  • @StoryTeller:我完全同意! :-)
  • 我的电脑没有问题。我试过你的代码,结果一样:(
【解决方案2】:

你的代码有两个问题:

  • 它永远不会重置count,并且
  • 它没有正确对待零,说0有零位

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

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

【讨论】:

  • 您好,首先我不知道如何使用这个网站。我希望我把这个评论放在正确的答案上。当我尝试在循环头中声明 'i' 时,它显示“仅在 C99 或 c11 模式下才允许查看初始声明”。我不明白你的最后一句话。我的英语不好对不起。
  • @Maryam_from_wonderland 这意味着默认情况下,您的编译器将源代码视为 C 的某个古老版本。您需要告诉编译器您正在使用该语言的现代版本(如“一个版本已在 18 多年前定义)。这是指向 how this can be done 的链接。
【解决方案3】:

您需要在每个循环中将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;
}

【讨论】:

  • 它没有。我先输入1,然后输入1234,结果是4。:(
【解决方案4】:

如果你想计算十进制数,你可以试试这个:

#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

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2014-08-25
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多