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) } } }
代码说明
hasFiveOrMoreDuplicates函数:把big.Int转为字符串后,用map统计每个数字字符的出现次数,一旦发现某个字符出现≥5次就直接返回true,减少不必要的遍历开销。- 循环状态控制:
- 用
needContinue标记是否需要连续输出:当遇到包含5个相同字符的数时,将标记设为true,后续持续输出直到遇到不满足条件的数。 - 当输出完最后一个需要连续计数的数(当前数不再符合条件),立即换行并重置标记,恢复正常单行输出逻辑。
- 用
内容的提问来源于stack exchange,提问作者Mad
相关产品推荐
相关产品推荐

