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
|
||
}
|