如何从整数中移除奇数并合并结果(不使用字符串实现)
从整数中移除奇数数字(无字符串实现)
嘿,这个问题我之前写代码的时候也琢磨过,不用字符串的话,核心就是靠数学运算拆分+重组数字,完全可以用你说的while循环搞定,咱们来一步步理清楚:
核心思路
不用字符串的话,我们没法直接拼接数字,所以得靠「位权」来重组:
- 每次从原数的末尾拆出一位数字
- 判断如果是偶数,就把它放到结果的对应位置(靠乘以10的倍数来实现位数提升)
- 把原数去掉末尾的数字,循环直到原数变成0
代码实现(以Python为例)
def remove_odd_digits(original_num): result = 0 place_value = 1 # 记录当前要添加的数字的位权:个位是1,十位是10,以此类推 while original_num > 0: # 拆出最后一位数字 current_digit = original_num % 10 # 只保留偶数数字 if current_digit % 2 == 0: result += current_digit * place_value place_value *= 10 # 位权升级,下一个偶数要放在更高位 # 去掉原数的最后一位,继续处理前面的数字 original_num = original_num // 10 return result # 测试你的例子 print(remove_odd_digits(23875326)) # 输出:2826
逻辑拆解
咱们拿你的例子23875326走一遍流程,你就能明白:
- 第一次循环:拆出
6(偶数),result = 6*1 =6,place_value变成10,原数变成2387532 - 第二次循环:拆出
2(偶数),result =6 +2*10=26,place_value变成100,原数变成238753 - 第三次循环:拆出
3(奇数),直接跳过,原数变成23875 - 后面依次跳过
5、7,直到拆出8:result=26 +8*100=826,place_value变成1000,原数变成23 - 跳过
3,最后拆出2:result=826 +2*1000=2826,完美得到目标结果!
特殊情况处理
如果输入的数字全是奇数(比如1357),函数会返回0,如果你需要对这种情况做特殊处理(比如返回空或者提示),可以在最后加个判断:
def remove_odd_digits(original_num): result = 0 place_value = 1 while original_num > 0: current_digit = original_num % 10 if current_digit % 2 == 0: result += current_digit * place_value place_value *= 10 original_num = original_num // 10 # 全奇数的情况返回None或者自定义提示 return result if result !=0 else None
内容的提问来源于stack exchange,提问作者msacco
相关产品推荐
相关产品推荐

