You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何输出数字中与前一位不同的每一位数字?

解决连续重复数字移除问题

你的需求是移除数字中连续重复的相邻位(比如输入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:05:24