C++代码排查:两位数中一位数字能否被另一位整除的判断逻辑异常问题
问题排查与修复方案
嘿,我仔细看了下你的代码,发现两个关键问题导致它不能正常运行,咱们一步步理清楚:
1. 整除判断逻辑搞反了
你现在写的y/z==0 || z/y==0完全不对哦!整除的正确判断应该是余数为0,比如9能被3整除,是9 % 3 == 0,而不是9/3 == 0——毕竟9除以3的商是3,根本不是0呀。你的例子描述里也写错啦,应该是9/3=3,余数为0才对~
2. 存在除以0的致命错误
如果输入的两位数包含0(比如10、50),当个位是0的时候,y/z就是除以0,直接触发运行时异常,程序会崩溃;同理如果十位是0(不过两位数不会有前导0,但比如输入05的话,cin会当成5处理,这个倒是次要)。所以必须先判断除数不能为0,再做整除检查。
修复后的完整代码
#include <iostream> using namespace std; int main() { int x, tens, units; cin >> x; tens = x / 10; // 提取十位数字 units = x % 10; // 提取个位数字 bool isDivisible = false; // 先检查十位不为0,再看个位能否被十位整除 if (tens != 0 && units % tens == 0) { isDivisible = true; } // 再检查个位不为0,看十位能否被个位整除 if (units != 0 && tens % units == 0) { isDivisible = true; } cout << (isDivisible ? "YES" : "NO") << endl; return 0; }
测试几个典型案例
- 输入39:十位3,个位9,
9%3==0,输出YES - 输入64:6%4=2,4%6=4,都不为0,输出NO
- 输入10:个位0,
0%1==0,输出YES - 输入50:个位0,
0%5==0,输出YES - 输入11:
1%1==0,输出YES
这样调整后,逻辑就完全正确了,也不会出现除以0的崩溃问题啦。
内容的提问来源于stack exchange,提问作者hazey2
相关产品推荐
相关产品推荐

