Problem F: 计算地址掩码和地址数

发布时间 2023-04-24 16:37:51作者: hangsingplus
 1 def INTO(list):
 2     sum = 0;
 3     length = len(list)
 4     for i in range(length):
 5         sum+=list[i]*pow(2,i)
 6     return sum
 7 #计算地址掩码
 8 def caculate(a):
 9     x = int(a)
10     i = x // 8
11     n = x % 8
12     list = []
13     if x<1 or x>30:
14         return
15     if i==0:
16         for j in range(8):
17             if j<n:
18                 list.append(1)
19             else:
20                 list.append(0)
21         list.reverse()
22         ans = INTO(list)
23         num = pow(2,32-x)-2
24         print("%d.0.0.0 %d" %(ans,num))
25         return
26     if i==1:
27         for j in range(8):
28             if j < n:
29                 list.append(1)
30             else:
31                 list.append(0)
32         list.reverse()
33         ans = INTO(list)
34         num = pow(2,32-x)-2
35         print("255.%d.0.0 %d" %(ans,num))
36         return
37     if i==2:
38         for j in range(8):
39             if j < n:
40                 list.append(1)
41             else:
42                 list.append(0)
43         list.reverse()
44         ans = INTO(list)
45         num = pow(2,32-x)-2
46         print("255.255.%d.0 %d" %(ans,num))
47         return
48     if i==3:
49         for j in range(8):
50             if j < n:
51                 list.append(1)
52             else:
53                 list.append(0)
54         list.reverse()
55         ans = INTO(list)
56         num = pow(2,32-x)-2
57         print("255.255.255.%d %d" %(ans,num))
58         return
59 def func():
60     while True:
61         try:
62             a = input()
63             caculate(a)
64         except EOFError:
65             break
66 if __name__ == '__main__':
67     func()