2015-11-19 37 views
1

所以我想创建一个代码来查找数字中的数字数量。所以这可能听起来很奇怪,但它的作用就像这样。计算C中的整数数

Input 
12893012 

Output 
1 2 2 1 0 0 0 0 1 1 

所以装置的输出,在12893012中,有一个0,2 1'S,2 2的,一个3,第4,没有5,无6,无7,一个8,和一个9

#include <stdio.h> 
int main() 
{ 
int n,count=0; 
printf("Enter an integer: "); 
scanf("%d", &n); 
while(n!=0) 
{ 
    n/=10;    /* n=n/10 */ 
    ++count; 
} 
printf("Number of digits: %d",count); 
} 

我的代码似乎只能找到数字中的位数,任何想法?非常感谢btw。

+2

阿呆的解决方案:'INT numberOfZeros = 0,numberOfOnes = 0 ,numberOfTwos = 0,...;'。根据当前的最后一位数字增加它们。不那么愚蠢的解决方案:'int digitCount [10] = {0};'。根据当前的最后一位数字递增。 – Zeta

+1

如果输入为“0”,则应输出为“1 0 0 0 0 0 0 0 0 0”或“0 0 0 0 0 0 0 0 0 0 0”? – chux

+0

发布的代码中没有包含任何数字的每个数量级的出现次数,所有发布的代码都是统计数字中的数字数。请张贴试图回答问题的代码。 – user3629249

回答

6

把它放入一个数组并计数。

粗略地说,

int count[10] = {0}; 
while(n != 0) 
{ 
    count[n % 10]++; 
    n /= 10; 
} 

打印出结果。

+0

已编辑。谢谢。 – rohit89

2

您继续递增count但未检查数字。这只会给你一些数字。您需要一个数组,您可以在其中存储每个数字的计数。

int digitCounts[10]; 
//... 
while (n != 0){ 
    digitCounts[n % 10]++; 
    n /= 10; 
} 

您可以使用mod%),使其更容易,因为% 10给出了最后一位。

2

制作一个存储数字计数的数组。其余运营商将会给你的最后一位,这将是9介于0和

int digit[10]; 
//... 
while(n!=0) 
{ 
    int d = n % 10; 
    digit[d]++ 
//... 

,然后在循环打印。

1

我建议创建一个数组(或10个变量),它包含数字的数量,然后逐个读取数字并检查它是什么数字。 可以使用

scanf(%1d, &variableName) 

getchar() 

功能读取单个数字。

0

所有要感谢@ rohit89,@这一点,并@ Arc676

这仅仅是一个当零输入(0)修正

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

如果代码使用'do {} while循环而不是'while {}',则可以删除if()。 – chux

+0

@chux,怎么样,我无法得到图像。 – milevyo

+0

而不是'if(n){...} else {...}',使用'do {count [n%10] ++; n/= 10;} while(n);' – chux