代码
package main
import (
"fmt"
"math"
"strings"
)
func isPrime(num int64) bool {
if num < 2 {
return false
}
if num == 2 || num == 3 {
return true
}
if num&1 == 0 {
return false
}
if num%6 != 1 && num%6 != 5 {
return false
}
sqrt := int64(math.Sqrt(float64(num)) + 1)
for i := int64(5); i <= sqrt; i += 6 {
if num%i == 0 || num%(i+2) == 0 {
return false
}
}
return true
}
func boolFunc[T any](cond bool, v1 T, v2 T) T {
if cond {
return v1
} else {
return v2
}
}
func formatNum(num string) string {
numLen := len(num)
arrLen := numLen + numLen/4 + boolFunc(numLen%4 == 0, -1, 0)
arr := make([]string, arrLen)
print_ := false
for i, j := 0, 0; i < arrLen; i++ {
if !print_ && j > 0 && (numLen-j)&3 == 0 {
arr[i] = string('_')
print_ = true
} else {
arr[i] = string(num[j])
j++
print_ = false
}
}
return strings.Join(arr, "")
}
func main() {
fmt.Println(formatNum("12345678"))
fmt.Println(formatNum("123456789"))
fmt.Println(formatNum("1234567891"))
fmt.Println(formatNum("12345678912"))
fmt.Println(formatNum("123456789123"))
fmt.Println(formatNum("1234567891234"))
}
执行效果
1234_5678
1_2345_6789
12_3456_7891
123_4567_8912
1234_5678_9123
1_2345_6789_1234