递归检查两个unsigned long long数字公共数位的问题求助
问题分析
你的代码现在只对比两个数相同位置的数位(比如个位和个位、十位和十位),但这不符合“公共数位”的要求——公共数位是指某个数字同时出现在两个数的任意位置,而非必须在同一位置。
举个典型反例:如果测试用例是n1=1234、n2=356,你的代码会依次对比4和6、3和5、2和3、1和0,最终返回-1,但实际上3是两个数的公共数位,这就是第二个测试用例失败的核心原因。
另外,你的代码在处理含0的情况时也有漏洞:如果其中一个数是0,另一个数包含0(比如n1=0、n2=50),你的代码会直接返回-1,但实际上0是合法的公共数位。
修正提示
- 先实现一个辅助逻辑:判断某个0-9的数字是否存在于给定的
unsigned long long数中。可以用循环取每一位对比的方式实现,注意处理数字本身就是0的情况。 - 调整递归逻辑:
- 每次取出第一个数的最后一位,用辅助逻辑检查这个数位是否在第二个数中存在。如果存在,直接返回该数位。
- 如果不存在,递归处理第一个数去掉最后一位后的结果(第二个数保持不变),继续检查下一位。
- 当第一个数被遍历完(
n1 == 0),说明第一个数的所有数位都不在第二个数中,直接返回-1即可。
- 修正0的判断逻辑:不要在开头直接返回-1,而是结合辅助逻辑判断0是否是公共数位。
内容的提问来源于stack exchange,提问作者EraoS
相关产品推荐
相关产品推荐

