Golang for 循环
Golang for loop
package main
import "fmt"
func main() {
num := []int{}
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, i)
} else if i == 2 {
num = append(num, i)
} else if i == 3 {
num = append(num, 4)
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
}
我是 golang 的初级水平,并尝试像上面那样制作一个 for 循环。其实我只是想解决那个著名的棋盘和小麦问题。您可以在下面看到 url。但在最后一项上,如果 i=64,它会给出否定结果。我只是不明白为什么它是负面的。能帮帮我吗,先谢谢了。
https://en.m.wikipedia.org/wiki/Wheat_and_chessboard_problem
编辑:
这是解决方案
package main
import "fmt"
func main() {
num := []uint64{}
var total uint64 = 0
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, uint64(i))
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
for _, s := range num {
total += s
}
fmt.Println("Total: ", total)
}
因为最后一个数字 9223372036854775808 超出了 int64 范围,https://pkg.go.dev/builtin#int64
更改为 uint64 有效。
package main
import "fmt"
func main() {
num := []uint64{}
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, uint64(i))
} else if i == 2 {
num = append(num, uint64(i))
} else if i == 3 {
num = append(num, uint64(4))
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
}
给予
[]
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904
9223372036854775808
package main
import "fmt"
func main() {
num := []int{}
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, i)
} else if i == 2 {
num = append(num, i)
} else if i == 3 {
num = append(num, 4)
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
}
我是 golang 的初级水平,并尝试像上面那样制作一个 for 循环。其实我只是想解决那个著名的棋盘和小麦问题。您可以在下面看到 url。但在最后一项上,如果 i=64,它会给出否定结果。我只是不明白为什么它是负面的。能帮帮我吗,先谢谢了。
https://en.m.wikipedia.org/wiki/Wheat_and_chessboard_problem
编辑: 这是解决方案
package main
import "fmt"
func main() {
num := []uint64{}
var total uint64 = 0
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, uint64(i))
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
for _, s := range num {
total += s
}
fmt.Println("Total: ", total)
}
因为最后一个数字 9223372036854775808 超出了 int64 范围,https://pkg.go.dev/builtin#int64
更改为 uint64 有效。
package main
import "fmt"
func main() {
num := []uint64{}
fmt.Println(num)
for i := 1; i <= 64; i++ {
if i == 1 {
num = append(num, uint64(i))
} else if i == 2 {
num = append(num, uint64(i))
} else if i == 3 {
num = append(num, uint64(4))
} else {
num = append(num, 2*(num[len(num)-1]))
// get last item
}
}
for _, s := range num {
fmt.Println(s)
}
}
给予
[]
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904
9223372036854775808