在C语言中计算一个整数中特定数字的数量

3
例如:如果用户输入为11234517,并想要查看此输入中数字1的数量,则输出将是“数字1的数量为3”。希望您理解我的意思。
我只能计算整数中数字的数量。
#include <stdio.h>
int main()
{
    int n, count = 0;

    printf("Enter an integer number:");
    scanf("%d",&n);
    while (n != 0)
    {
        n/=10;
        count++;
    }
    printf("Digits in your number: %d",count);
    return 0;
}

也许数组是解决方案。 感谢您的帮助!


2
提示:在while循环体内使用“%”运算符,以查找特定数字。 - Grzegorz Szpetkowski
1
你为什么忽略了 scanf() 的返回值? - Iharob Al Asimi
提示:如何从int值中打印出每个数字? - Sourav Ghosh
3个回答

5
你不需要数组。尝试使用类似以下的代码:
int countDigits(int number, int digitToCount)
{
  // Store how many times given number occured
  int counter = 0;

  while(number != 0)
  {
   int tempDigit = number % 10;
   if(tempDigit == digitToCount)
     counter++;
   number = number/10;
  }

 return counter;
}

小问题:countDigits(0, 0) 返回 0。我期望的是 1。使用 do {} while () 而不是 while () {} 就可以解决这个问题。 - chux - Reinstate Monica
@chux:如果两个都是零,返回1,或者只需检查一下。我不喜欢“do..while”。 - Giorgi Moniava

4

因此,您已经发现可以使用 number / 101234 转换为 123(即删除最低有效位)。

如果我们想获取最低有效位,我们可以使用 number % 10。对于 1234,它的值为 4

了解了这一点,我们可以修改您的代码以考虑到这一点:

int main() {
    int n, count = 0;

    printf("Enter an integer number:");
    scanf("%d",&n);

    while (n != 0) {
        if (n % 10 == 1)
            count++;
        n /= 10;
    }

    printf("Number of 1s in your number: %d", count);
    return 0;
}

1
你可能想要使用 将你的整数转换为字符串,就像这样:

char str[100];
sprintf(str, "%d", n);

然后,您可以迭代字符串str以查找数字出现的位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接