如何利用该系统以获取账户银行账户中尽可能大的金额?
您会向银行员工提供哪些实施建议?
package main
import (
"fmt"
"os"
"strconv"
)
var bankAccount uint16 = 1337
func withdraw(amountToWithdraw uint16) {
if amountToWithdraw > 0 {
bankAccount -= amountToWithdraw
}
}
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: go run main.go <amount>")
return
}
amountStr := os.Args[1]
amount, err := strconv.ParseUint(amountStr, 10, 16)
if err != nil {
fmt.Println("Invalid amount")
return
}
withdraw(uint16(amount))
fmt.Print(bankAccount)
}
这题的答案是比银行账户大1的数字。
bankAccount := 1337
, 因此amountToWithdraw := 1338
。以下是此实现的示例:GO 上的示例。为什么会发生这种情况?事实上,uint中的数字都是以“0”开头的,因此,如果我们取一个较小的数字,那么我们就像超出了左边界一样,最终会到达右边,也就是只能存储的最大数字位于该变量中。