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

Go语言:如何判断big.Int数字相同字符数并控制循环逻辑?

Go语言中处理big.Int数字的重复字符判断与连续计数逻辑

核心实现步骤

  • 将big.Int转换为字符串,统计每个数字字符的出现次数
  • 判断是否存在数字字符出现次数≥5,以此触发连续计数逻辑
  • 在循环中维护状态标记,控制输出换行时机

完整代码示例

package main

import (
	"fmt"
	"math/big"
)

// 判断数字是否包含至少5个相同的字符
func hasFiveOrMoreDuplicates(n *big.Int) bool {
	s := n.String()
	counts := make(map[rune]int)
	for _, c := range s {
		counts[c]++
		if counts[c] >= 5 {
			return true
		}
	}
	return false
}

func main() {
	n1 := new(big.Int)
	n1.SetString("1000000", 10)

	n2 := new(big.Int)
	n2.SetString("1000009", 10)

	one := big.NewInt(1)
	needContinue := false

	// 注意:这里要复制n1的初始值,避免修改原变量
	for i := new(big.Int).Set(n1); i.Cmp(n2) < 0; i.Add(i, one) {
		currentHasFive := hasFiveOrMoreDuplicates(i)
		if currentHasFive || needContinue {
			fmt.Print(i, " ")
			needContinue = currentHasFive
			// 当当前数不再符合条件时,换行并重置状态
			if !currentHasFive {
				fmt.Println()
				needContinue = false
			}
		} else {
			fmt.Println(i)
		}
	}
}

代码说明

  1. hasFiveOrMoreDuplicates函数:把big.Int转为字符串后,用map统计每个数字字符的出现次数,一旦发现某个字符出现≥5次就直接返回true,减少不必要的遍历开销。
  2. 循环状态控制:
    • 用needContinue标记是否需要连续输出:当遇到包含5个相同字符的数时,将标记设为true,后续持续输出直到遇到不满足条件的数。
    • 当输出完最后一个需要连续计数的数(当前数不再符合条件),立即换行并重置标记,恢复正常单行输出逻辑。

内容的提问来源于stack exchange,提问作者Mad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:19:47