如何输出数字中与前一位不同的每一位数字?
解决连续重复数字移除问题
你的需求是移除数字中连续重复的相邻位(比如输入35565,输出3565),核心问题在于需要记录前一位数字,和当前位比对后决定是否保留。你的现有代码只是单纯逐位截取数字,没有存储前一位的逻辑,所以没法完成比对判断。
这里提供两种可直接运行的Go语言实现方案:
方案1:拆分数字为各位列表后过滤重复项
先把数字拆解为每一位的切片,遍历切片时只保留和前一位不同的元素,最后再把切片转回数字:
package main import "fmt" func main() { num := 35565 if num == 0 { fmt.Println(0) return } // 拆分数字为各位切片(从低位到高位) var digits []int for num > 0 { digits = append(digits, num%10) num = num / 10 } // 反转切片,得到高位到低位的顺序 for i, j := 0, len(digits)-1; i < j; i, j = i+1, j-1 { digits[i], digits[j] = digits[j], digits[i] } // 过滤连续重复项 var filtered []int prev := -1 // 初始值设为0-9以外的数,避免和首位数字冲突 for _, d := range digits { if d != prev { filtered = append(filtered, d) prev = d } } // 把切片转回数字 result := 0 for _, d := range filtered { result = result*10 + d } fmt.Println(result) // 输出3565 }
方案2:边遍历边比对,直接构建结果
不需要拆分整个数字,遍历每一位时直接记录前一位,同时构建结果(注意处理顺序反转):
package main import "fmt" func main() { num := 35565 if num == 0 { fmt.Println(0) return } result := 0 prev := -1 // 初始标记位 for num > 0 { current := num % 10 // 取当前数字的最后一位 if current != prev { result = result*10 + current prev = current } num = num / 10 // 移除最后一位,继续遍历 } // 反转结果,因为之前是从低位开始构建的 final := 0 for result > 0 { final = final*10 + result%10 result = result / 10 } fmt.Println(final) // 输出3565 }
核心逻辑说明
- 用
prev变量存储上一次保留的数字位,每次取当前位和prev比对,不同则保留当前位并更新prev - 注意数字的遍历顺序:
num%10取的是低位,num/10是移除低位,所以构建结果后需要反转(方案2),或者先拆分再反转切片(方案1)来得到正确的高位到低位顺序
内容的提问来源于stack exchange,提问作者the noob coder
相关产品推荐
相关产品推荐

