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

如何在C++中获取两个整数的公共数字?代码异常修复问询

修复代码:提取两个整数的公共数字(不使用数组/vector)

先拆解下你代码里的几个核心问题:

  • 致命赋值错误:for循环里你把y = cx;写错了,这导致检查y的数字时,实际用的是x的原始值,完全偏离了需求,应该用y的原始值cy。
  • while循环逻辑漏洞:while (x != 0 || kX==0)会引发两种问题:一是当数字不含当前遍历的i且x已被除到0时,kX始终为0,条件永远成立,会陷入无限循环;二是会错误把0判定为公共数字(哪怕x和y都不是0,循环也会多跑一次检查x=0的情况)。
  • 未处理0的特殊场景:如果输入的x或y本身就是0,原代码的逻辑会直接跳过正确的判断。

下面是修复后的完整代码,我标注了关键修改点:

#include <iostream>
using namespace std;

void problema3() { 
    int x, y; 
    cout << "x="; 
    cin >> x; 
    cout << "y="; 
    cin >> y; 

    // 保存原始输入值,避免循环中修改后丢失
    int cx = x; 
    int cy = y; 

    // 遍历0-9所有可能的数字
    for (int i = 0; i < 10; i++) { 
        bool existsInX = false;
        bool existsInY = false;

        // 检查数字i是否存在于x中
        int tempX = cx;
        // 单独处理x为0的特殊情况
        if (tempX == 0) {
            existsInX = (i == 0);
        } else {
            while (tempX != 0) { 
                if (tempX % 10 == i) {
                    existsInX = true;
                    break; // 找到目标数字就提前退出,减少不必要计算
                }
                tempX /= 10; 
            }
        }

        // 检查数字i是否存在于y中
        int tempY = cy;
        // 单独处理y为0的特殊情况
        if (tempY == 0) {
            existsInY = (i == 0);
        } else {
            while (tempY != 0) { 
                if (tempY % 10 == i) {
                    existsInY = true;
                    break; // 找到目标数字就提前退出
                }
                tempY /= 10; 
            }
        }

        // 若两个数都包含当前数字,输出
        if (existsInX && existsInY) {
            cout << i << ' '; 
        }
    }
} 

int main() { 
    problema3(); 
    return 0; 
}

关键修改说明:

  1. 修正了赋值错误,确保检查y时用的是原始输入值cy
  2. 用更直观的布尔变量existsInX/existsInY替代原有的kX/kY,逻辑可读性更强
  3. 优化循环逻辑:找到目标数字后立即break,避免无效计算;同时单独处理输入为0的场景,覆盖所有边界情况
  4. 修正了while循环条件,只在数字未被除尽时继续循环,彻底避免无限循环问题

测试你给出的例子:x=1234,y=41567,运行后会输出1 4 ,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:14:06