45 lines
868 B
Go
45 lines
868 B
Go
|
|
package intUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"math/rand"
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// ShuffleIntDigits 打乱整数的各个数字位置并返回新的整数
|
|||
|
|
func ShuffleIntDigits(num int64) (int64, error) {
|
|||
|
|
if num < 0 {
|
|||
|
|
return 0, fmt.Errorf("number must be non-negative")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var digits []int64
|
|||
|
|
for num > 0 {
|
|||
|
|
digits = append(digits, num%10)
|
|||
|
|
num /= 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 如果原始数字是0,直接返回
|
|||
|
|
if len(digits) == 0 {
|
|||
|
|
return 0, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 反转切片以保持原来的数字顺序
|
|||
|
|
for i, j := 0, len(digits)-1; i < j; i, j = i+1, j-1 {
|
|||
|
|
digits[i], digits[j] = digits[j], digits[i]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 打乱数字切片
|
|||
|
|
rand.Seed(time.Now().UnixNano())
|
|||
|
|
rand.Shuffle(len(digits), func(i, j int) {
|
|||
|
|
digits[i], digits[j] = digits[j], digits[i]
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 重新组合为新的整数
|
|||
|
|
result := int64(0)
|
|||
|
|
for _, digit := range digits {
|
|||
|
|
result = result*10 + digit
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return result, nil
|
|||
|
|
}
|