package main import ( "fmt" "strconv" "strings" ) func main() { var mask, ip1, ip2 string fmt.Scanf("%s\n%s\n%s", &mask, &ip1, &ip2) masks := strings.SplitN(mask, ".", -1) ip1s := strings.SplitN(ip1, ".", -1) ip2s := strings.SplitN(ip2, ".", -1) if len(ip1s) != 4 || len(ip2s) != 4 || len(masks) != 4 { fmt.Println(1) return } var mask0 = false var flag = 0 for i := 0; i < 4; i++ { m, err := strconv.ParseUint(masks[i], 10, 32) if err != nil { fmt.Println(1) return } first, err := strconv.ParseUint(ip1s[i], 10, 32) if err != nil { fmt.Println(1) return } second, err := strconv.ParseUint(ip2s[i], 10, 32) if err != nil { fmt.Println(1) return } if first > 255 || second > 255 || m > 255 { fmt.Println(1) return } if (first&m) != (second&m) { flag = 2 } // 判断掩码中1是否连续 for j := 7; j >= 0; j-- { if (1<<j)& m == 0 { mask0 = true } else if mask0 { fmt.Println(1) return } } } fmt.Println(flag) }