package main
import (
"fmt"
"strings"
"sort"
)
func sameDigits(a uint64, b uint64) bool {
// просто печатаем число в строку и возвращает эту строку
// %v это value
aConverted := fmt.Sprintf("%v", a)
bConverted := fmt.Sprintf("%v", b)
// разделяем строку на куски (символы)
aSplitted := strings.Split(aConverted, "")
bSplitted := strings.Split(bConverted, "")
// сортируем
sort.Strings(aSplitted)
sort.Strings(bSplitted)
// соединяем в целую строку обратно
aJoined := strings.Join(aSplitted, "")
bJoined := strings.Join(bSplitted, "")
// тупо сравниваем результат
return aJoined == bJoined
}
func main() {
limit := ^uint64(0) // ^ это битовая операция отрицания. ^00000000 == 11111111, т.е. макс. число.
limit = 142858 // хотя лучше лимит поменьше поставить))
for number := uint64(1); number < limit; number += 1 {
result := fmt.Sprintf("%v", number)
for multiplier := uint64(6); multiplier >= 2; multiplier -= 1 {
multipled := number * multiplier
if !sameDigits(number, multipled) {
break
}
result += fmt.Sprintf(" %v", multipled)
if multiplier == 2 {
fmt.Println(result)
}
}
}
}