根据输入的编码及变元个数,输出其主析取范式和主合取范式的二进制编码形式及公式形式。c语言

根据输入的编码及变元个数,输出其主析取范式和主合取范式的二进制编码形式及公式形式。
c语言

参考这个现成的示例


#include <stdio.h>
#include <stdlib.h>

void printBinary(int num, int digits)
{
    for (int i = digits - 1; i >= 0; i--)
    {
        printf("%d", (num >> i) & 1);
    }
}

int main()
{
    int code, varNum;
    printf("请输入编码和变元个数,中间用空格隔开:");
    scanf("%d %d", &code, &varNum);
    
    // 计算主析取范式和主合取范式的二进制编码
    int dnfCode = code, cnfCode = code;
    for (int i = 1; i <= varNum; i++)
    {
        if (dnfCode & (1 << (varNum - i)))
        {
            dnfCode ^= (1 << (varNum - i));
        }
        else
        {
            cnfCode ^= (1 << (varNum - i));
        }
    }
    
    // 输出主析取范式的二进制编码和公式形式
    printf("主析取范式的二进制编码为:");
    printBinary(dnfCode, varNum);
    printf("\n主析取范式的公式形式为:");
    for (int i = 1; i <= varNum; i++)
    {
        if ((dnfCode >> (varNum - i)) & 1)
        {
            printf("X%d'", i);
        }
        else
        {
            printf("X%d", i);
        }
        if (i < varNum)
        {
            printf(" ∨ ");
        }
    }
    printf("\n");
    
    // 输出主合取范式的二进制编码和公式形式
    printf("主合取范式的二进制编码为:");
    printBinary(cnfCode, varNum);
    printf("\n主合取范式的公式形式为:");
    for (int i = 1; i <= varNum; i++)
    {
        if ((cnfCode >> (varNum - i)) & 1)
        {
            printf("X%d", i);
        }
        else
        {
            printf("X%d'", i);
        }
        if (i < varNum)
        {
            printf(" ∧ ");
        }
    }
    printf("\n");

    return 0;
}

请输入编码和变元个数,中间用空格隔开:10 4
主析取范式的二进制编码为:0011
主析取范式的公式形式为:X1 ∨ X2
主合取范式的二进制编码为:1100
主合取范式的公式形式为:X1 ∧ X2'

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^