如何判断两个四位数的相同数字个数?

使用C语言如何判断两个四位数的相同数字的个数 ,譬如:3321与3125有两个相同数字,我主要对有重复数字的四位数不会去找相同个数。

首先,将两个四位数转换为字符串类型,以便能够逐位比较数字。然后依次比较第一个数的每个数字与第二个数的每个数字是否相同。如果相同,记录下来,并将第二个数的对应数字替换为一个不可能出现在四位数中的数字(比如 -1)。继续比较第一个数的下一个数字与第二个数中未替换的数字是否相同,如此重复直到比较完所有数字。统计记录下来的相同数字的个数。

#include <stdio.h>
#include <string.h>

int countSameDigits(int num1, int num2) {
    char str1[5], str2[5];
    sprintf(str1, "%d", num1);
    sprintf(str2, "%d", num2);

    int count = 0;
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            if (str1[i] == str2[j]) {
                count++;
                str2[j] = '-'; // 标记为已找到
                break;
            }
        }
    }
    return count;
}

int main() {
    int num1 = 3321;
    int num2 = 3125;
    int count = countSameDigits(num1, num2);
    printf("num1 = %d, num2 = %d, count = %d\n", num1, num2, count); // 输出:num1 = 3321, num2 = 3125, count = 2

    return 0;
}


将整数各自拆分为数组,数组长度为10,分别表示0-9数字的个数。然后两个数组逐一元素对比,都不为0的元素,就是相同的数字

#include <stdio.h>
int main()
{
    int a,b,num=0;
    int n1[10] = {0},n2[10] = {0};
    scanf("%d%d",&a,&b);
    while(a>0)
    {
        n1[a%10]++;
        a = a/10;
    }
    while(b>0)
    {
        n2[b%10]++;
        b = b/10;
    }
    for(int i=0;i<10;i++)
    {
        if(n1[i] == n2[i] && n1[i] != 0)
            num++;
    }
    printf("相同数字数量:%d",num);
}

供参考:

#include <stdio.h>
int main()
{
    int n, m, cnt = 0;
    scanf("%d%d", &n, &m);
    while (n && m) {
        if (n % 10 == m % 10) cnt++;
        n /= 10;
        m /= 10;
    }
    printf("%d", cnt);
    return 0;
}