1 条题解

  • 1
    @ 2025-5-13 14:01:34

    题意分析​

    11. ​问题描述​:将3232位二进制字符串(如1100000010101000000000010000000111000000101010000000000100000001)转换为点分十进制IP地址(如192.168.1.1(如192.168.1.1)

    22. ​核心规则​: 每88位为一组(称为一个“八位组”),共44组。

    每组二进制转换为十进制(范围0 2550~255),用点号.连接。

    33. ​输入输出​:

    输入:第一行为测试用例数N,随后NN行每行为3232位二进制字符串。

    输出:NN行对应的点分十进制IP地址。

    解题思路

    11. 分割二进制字符串​: 将3232位字符串均分为44段,每段88位。例如: $binary ="11000000101010000000000100000001" octets = [binary[i*8:(i+1)*8] for i in range(4)] $

    22. 二进制转十进制​:

    对每个88位二进制,按权值展开求和。权值为272^ 7202^0(即128,64,32,16,8,4,2,1128, 64, 32, 16, 8, 4, 2, 1)

    33. 组合结果​:

    44个十进制数以点号连接,如192.168.1.1192.168.1.1。

    标程

    #include<iostream>
    #include<cmath>
    using namespace std;
    int bin[10] = {128, 64, 32, 16, 8, 4, 2, 1};
     
    int main()
    {
    	int n,sum,i,j;
    	char a[33];
    	cin>>n;
    	while(n--)
    	{
    		
    		i=0;
    		cin>>a;
    		while(i<32)
    		{
    			sum = 0;
    			for(j=i%8;j<8;j++)
    			{
    				if(a[i] == '1')
    					sum+=bin[j];
    				i++;
    			}
    			cout<<sum;
    			if(i!=32)
    				cout<<".";
    		}
    		cout<<endl;
    		
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1106
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者