我正在尝试将 pi 转换为字母。例如,3141519265 将是 cadaeaibfe。 C是字母表中的第三个字母。所以我们会得到三个。我已经创建了包含所有翻译的地图,但我不知道如何翻译。我猜我必须创建一个 for 循环来解析 pi。我怎么能做到这一点?
这是我的代码:
package main
import (
"fmt"
"io/ioutil"
"log"
)
var (
m map[int]string;
pi int = 3141519265
)
func main() {
m = make(map[int]string)
m[1] = "a"
m[2] = "b"
m[3] = "c"
m[4] = "d"
m[5] = "e"
m[6] = "f"
m[7] = "g"
m[8] = "h"
m[9] = "i"
m[10] = "j"
m[11] = "k"
m[12] = "l"
m[13] = "m"
m[14] = "n"
m[15] = "o"
m[16] = "p"
m[17] = "q"
m[18] = "r"
m[19] = "s"
m[20] = "t"
m[21] = "u"
m[22] = "v"
m[23] = "w"
m[24] = "x"
m[25] = "y"
m[26] = "z"
}
您可能需要稍微充实一下您的算法,以确定您想要表示一个字符的位数(314 是“CAD”还是“CN”?)。为了简化起见,我假设 0-9 是唯一唯一的数字,这就是我想到的。
https://play.golang.org/p/vgo3gSLqUI0
package main
import (
"fmt"
)
func intSplit(i int) []int {
var r []int
for i != 0 {
r = append(r, i%10)
i = i / 10
}
return r
}
func intSliceToString(is []int) string {
var s string
for i := range is {
uv := is[len(is)-1-i] + 64 // 64 is the unicode offset & the -1-i essentially reverse the loop
s = s + fmt.Sprintf("%c", uv)
}
return s
}
func deCypher(i int) string {
list := intSplit(i)
return intSliceToString(list)
}
func main() {
dc := deCypher(54321)
fmt.Println(dc)
}
3.14159265358974323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230 6647093848609550582231725359408128481117450284102703805211055596446229489509303819