You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现XNOR门递归代码输出位序反转问题及修正方法咨询

解决XNOR递归输出位序反转的问题

嘿,我明白你遇到的问题了——递归处理二进制位时,因为先取模得到最低位并输出,最后输出的顺序自然是从低位到高位,和我们想要的高位到低位正好相反。下面给你几种简单的解决思路:

方法一:调整递归输出顺序(最直接)

核心思路是先递归处理高位,再输出当前位的结果。这样递归会先深入到最高位,然后从最高位开始依次输出,顺序就正确了。修改后的代码如下:

#include <iostream>
using namespace std;

int xnor(int x, int y) { 
    if (x > 0) { 
        // 先递归处理更高位,再处理当前位
        xnor(x / 10, y / 10); 
        int reminder1 = x % 10; 
        int reminder2 = y % 10; 
        // 用三元运算符简化判断,也可以保留原if-else
        cout << (reminder1 == reminder2 ? 1 : 0); 
    }
    return 0; // 这里返回值可以忽略,主要是完成输出逻辑
}

int main() {
    xnor(110001, 101110); // 输出:100000
    return 0;
}

方法二:用字符串存储结果后反转

如果不想调整递归顺序,可以把每一步的计算结果存入字符串,最后反转字符串再输出。这种方法适合需要保留中间结果的场景:

#include <iostream>
#include <string>
#include <algorithm> // 用于reverse函数
using namespace std;

string result_str;

int xnor(int x, int y) { 
    if (x > 0) { 
        int reminder1 = x % 10; 
        int reminder2 = y % 10; 
        // 把字符形式的结果加入字符串
        result_str += (reminder1 == reminder2 ? '1' : '0'); 
        xnor(x / 10, y / 10); 
    }
    return 0;
}

int main() {
    xnor(110001, 101110);
    reverse(result_str.begin(), result_str.end());
    cout << result_str; // 输出:100000
    return 0;
}

方法三:计算结果数值而非直接输出

如果需要返回正确顺序的数值结果,可以通过递归计算每一位的权重,最后累加得到正确的整数:

#include <iostream>
using namespace std;

int xnor(int x, int y, int position = 1) { 
    if (x == 0) {
        return 0;
    }
    int reminder1 = x % 10; 
    int reminder2 = y % 10; 
    int current_bit = (reminder1 == reminder2 ? 1 : 0);
    // 递归计算高位结果,加上当前位的数值(当前位*权重)
    return xnor(x / 10, y / 10, position * 10) + current_bit * position;
}

int main() {
    int result = xnor(110001, 101110);
    cout << result; // 输出:100000
    return 0;
}

为什么原代码会反转?

原代码中,你先处理当前的最低位(x%10)并输出,再递归处理高位。递归的执行顺序是先输出最低位,再依次输出更高位,最终结果自然是从低位到高位的顺序,和我们需要的高位到低位相反。调整输出时机或者存储后反转,就能解决这个问题啦~

内容的提问来源于stack exchange,提问作者jjjco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:55:34