簡體   English   中英

如何計算C中的數字位數?

[英]How to count digits of numbers in C?

我一直在嘗試解決這個問題,即要計算數字的總位數,我的代碼正在部分工作。 對於第一次嘗試它工作得很好,但是在第二次嘗試中,該計數與以前的計數相加。 請幫忙。

#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 ,並且
  • 它不能正確處理零,表示0位數為零

第一個問題的原因之一是您沒有限制變量的范圍,而是預先聲明了所有變量。 相反,您應該在需要它們的最緊密范圍內聲明它們: i應該在循環頭中聲明,而count應該在for循環內聲明和初始化。

至於處理零的問題,請添加一種特殊情況,當輸入零時將其打印為1 ,或切換為do / while循環。

該計數與以前的計數相加。

開始(結束)之前,將其(重新)設置為0

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

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

您需要在每個循環中將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;
}

如果要計算十進制數,可以嘗試以下操作:

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM