如何在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; }
关键修改说明:
- 修正了赋值错误,确保检查y时用的是原始输入值
cy - 用更直观的布尔变量
existsInX/existsInY替代原有的kX/kY,逻辑可读性更强 - 优化循环逻辑:找到目标数字后立即
break,避免无效计算;同时单独处理输入为0的场景,覆盖所有边界情况 - 修正了while循环条件,只在数字未被除尽时继续循环,彻底避免无限循环问题
测试你给出的例子:x=1234,y=41567,运行后会输出1 4 ,完全符合预期。
内容的提问来源于stack exchange,提问作者Stefan Lungoci
相关产品推荐
相关产品推荐

