C 计算整数中数字的出现次数
我想计算某个数字在整数中出现的频率。我有以下代码:C 计算整数中数字的出现次数,c,function,C,Function,我想计算某个数字在整数中出现的频率。我有以下代码: int main() { printf ("Put numbers\n"); int cislo; int s0,s1,s2,s3,s4,s5,s6,s7,s8,s9; while(scanf("%d",&cislo)==1){ if (cislo<0) printf ("Cislo %d, je zaporne, takove neberu", cisl
int main()
{
printf ("Put numbers\n");
int cislo;
int s0,s1,s2,s3,s4,s5,s6,s7,s8,s9;
while(scanf("%d",&cislo)==1){
if (cislo<0)
printf ("Cislo %d, je zaporne, takove neberu", cislo);
continue;
}
s0=s1=s2=s3=s4=s5=s6=s7=s8=s9=0;
do{
(cislo/=10);
switch (cislo%10){
case 0: ++s0; break;
case 1: ++s1; break;
case 2: ++s2; break;
case 3: ++s3; break;
case 4: ++s4; break;
case 5: ++s5; break;
case 6: ++s6; break;
case 7: ++s7; break;
case 8: ++s8; break;
case 9: ++s9; break;
}
}while (cislo>0);
printf ("Zadane cislo se sklada z cislic: \n\n 0 ... %dx \n 1 ... %dx \n 2 ... %dx \n 3 ... %dx \n 4 ... %dx \n 5 ... %dx \n 6 ... %dx \n 7 ... %dx \n 8 ... %dx \n 9 ... %dx \n",s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);
return 0;
}
intmain()
{
printf(“输入数字”);
int cislo;
int s0、s1、s2、s3、s4、s5、s6、s7、s8、s9;
而(scanf(“%d”,&cislo)==1){
if(cislo0);
printf(“Zadane cislo se sklada z cislic:\n\n 0…%dx\n 1…%dx\n 2…%dx\n 3…%dx\n 4…%dx\n 5…%dx\n 6…%dx\n 7…%dx\n 8…%dx\n 9…%dx\n”,s0、s1、s2、s3、s4、s5、s6、s8、s9);
返回0;
}
它必须如何工作:
Put number:
1111111111
Number: 1111111111
include:
0 ... 0x
1 ... 10x
2 ... 0x
3 ... 0x
4 ... 0x
5 ... 0x
6 ... 0x
7 ... 0x
8 ... 0x
9 ... 0x
输入号码:
1111111111
电话:1111111
包括:
0…0x
1…10倍
2…0x
3…0x
4…0x
5…0x
6…0x
7…0x
8…0x
9…0x
实际工作原理:
Put number:
1111111111
Number: 1111111111
include:
0 ... 1x
1 ... 9x
2 ... 0x
3 ... 0x
4 ... 0x
5 ... 0x
6 ... 0x
7 ... 0x
8 ... 0x
9 ... 0x
输入号码:
1111111111
电话:1111111
包括:
0…1x
1…9倍
2…0x
3…0x
4…0x
5…0x
6…0x
7…0x
8…0x
9…0x
有人知道为什么吗?在服用
mod
后将数字除以:
do{
switch (cislo%10){
case 0: ++s0; break;
case 1: ++s1; break;
case 2: ++s2; break;
case 3: ++s3; break;
case 4: ++s4; break;
case 5: ++s5; break;
case 6: ++s6; break;
case 7: ++s7; break;
case 8: ++s8; break;
case 9: ++s9; break;
}
cislo/=10;
}while (cislo>0);
因此,您在计数时丢失了一个数字
您的输入方法不是很好。因为,您只希望接收一个整数:
while(scanf("%d",&cislo)!=1){
这更合适
您还可以使用数组
s[10]
而不是10个整数。在循环时更改do
/:
do {
int nextval = cislo / 10;
switch (cislo - (nextval*10)) {
case 0: ++s0; break;
case 1: ++s1; break;
case 2: ++s2; break;
case 3: ++s3; break;
case 4: ++s4; break;
case 5: ++s5; break;
case 6: ++s6; break;
case 7: ++s7; break;
case 8: ++s8; break;
case 9: ++s9; break;
}
cislo = nextval;
} while (cislo>0);
请编辑您的问题,因为它不可读。您应该计算出如果只输入一个数字(例如,1
)会发生什么情况,并且当您理解这一点时,您可以测试11
,然后测试11111111
(如果从小/简单的情况开始,调试效果最好。)请帮自己一个忙并使用数组。