0

我想计算某个数字在整数中出现的频率。我有以下代码:

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

它必须如何工作:

放号:
1111111111

电话:1111111111

包括:
0 ... 0x
1 ... 10 倍
2 ... 0x
3 ... 0x
4 ... 0x
5 ... 0x
6 ... 0x
7 ... 0x
8 ... 0x
9 ... 0x

它实际上是如何工作的:

放号:
1111111111

电话:1111111111

包括:
0 ... 1x
1 ... 9 倍
2 ... 0x
3 ... 0x
4 ... 0x
5 ... 0x
6 ... 0x
7 ... 0x
8 ... 0x
9 ... 0x

有谁知道为什么?

4

2 回答 2

2

取后除数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 个整数。

于 2012-10-19T20:57:02.113 回答
0

更改do/while循环:

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);
于 2012-10-19T20:59:14.140 回答