UVA1590——IP Networks

本文通过Python实现了一个计算子网掩码的程序。利用位运算处理IP地址,找出公共部分并转换为子网掩码。代码适用于一系列IP地址,并能够输出相应的子网掩码及网络地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

while True:
    try:
        amount=int(input())
        if amount<=0:
            break;
        s1=s2=s3=s4=0
        s11=s22=s33=s44=0#standard
        sc=[255,255,255,255]
        for i in range(amount):
            ip=input()
            ip=ip.split('.')
            ip=[int(i) for i in ip]
            if i==0:
                s11,s22,s33,s44=ip
            else:
                t1,t2,t3,t4=ip
                t1,t2,t3,t4=~(t1^s11),~(t2^s22),~(t3^s33),~(t4^s44)
                sc=sc[0]&t1,sc[1]&t2,sc[2]&t3,sc[3]&t4
        flag=0
        sc=list(sc)
        for i in range(4):
            if flag==1:
                sc[i]=0
            elif sc[i]!=255:
                if sc[i]>=2**7:
                    flag=1
                    p=t=0
                    while sc[i]!=0:
                        t+=1
                        if sc[i]%2==0:
                            p=t
                        sc[i]=sc[i]//2
                    sc[i]=2**8-2**p
                else:
                    sc[i]=0
        IP=str(sc[0]&s11)+'.'+str(sc[1]&s22)+'.'+str(sc[2]&s33)+'.'\
            +str(sc[3]&s44)
        SONIP=str(sc[0])+'.'+str(sc[1])+'.'+str(sc[2])+'.'\
            +str(sc[3])
        print(IP)
        print(SONIP)
    except:
        break
    


这道题给我的教训有3:
1.请仔细考虑位运算真的能达到你想要的结果么
2.不要把时间浪费在语法错误上
3.mmp不要用python做acm题目,到时候debug都不知道怎么办。
我确信这题结果一定是对的,基本上对各种数据都能输出正确的结果,但是WA,估计是输入输出的问题,暂时无解。还是用c++做保险
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值