我在x中出现了多少次(无符号32位int C)

时间:2014-03-18 12:47:37

标签: c int sum unsigned

这对我来说有点混乱,但我必须看看我在x中出现了多少次。 因此,如果某人为i输入3并且x为4294967295,那么它应该说0次,但如果有人输入9表示i和4294967295表示x,则应该说3次。

这就是我所拥有的,但是输出用0表示0,所以它不起作用..

int main(int argc, char** argv) {
    unsigned int i;
    scanf("%u", &i);
    unsigned int x;
    scanf("%u", &x);
    int output = 0;
    int t = 0;
    while (t < 10) {
        x /= 10;
        if (i == x) {
            output++;
        }
        t++;
    }
    printf("%d", output);
}

3 个答案:

答案 0 :(得分:6)

问题是您将ix整个进行比较,而不是检查x的每个数字。

最简单的解决方案可能是将i作为字符阅读,请确保it's a digit。然后将x作为字符串读取(并确保它也是所有数字)。然后,对于字符串x中的每个字符,将其与i进行比较。

答案 1 :(得分:3)

您应从x中提取每个数字,并将其与数字i进行比较。

#include <stdio.h>

int main(void) {
    unsigned int i;
    scanf("%u", &i);
    unsigned int x;
    scanf("%u", &x);
    int output = 0;
    int t = 0;
    while(x > 0) {   
        t = x % 10;  // least significant digit of x
        if(t == x) {
            output++;
        }
        x /= 10;  
    }
    printf("%d", output);
}

答案 2 :(得分:2)

int main(int argc, char** argv) {

    unsigned int i;
    scanf("%u", &i);
    if(i > 9) {                                 // check it's a single digit
        printf("expecting a single digit\n");
        return 1;                               // to indicate failure
    }

    unsigned int x;
    scanf("%u", &x);

    int output = 0;      // initialized output, removed t (use x directly instead)
    if(x == 0) {         // special case if x is 0
        if(i == 0) {
            output = 1;
        }
    } else {

        while(x > 0) {         // while there is at least a digit
            if(i == (x % 10)) {  // compare to last digit
                output++;
            }
            x /= 10;            // remove the last digit
        }

    }

    printf("%d\n", output);    // added \n to be sure it's displayed correctly
    return 0;                  // to indicate success

}

另外,我建议使用更明确的变量名称,例如digitnumber,而不是xi