自学内容网 自学内容网

华为机试HJ33 整数与IP地址间的转换

首先看一下题

描述

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                       00001010
0                         00000000
3                         00000011
193                    11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

数据范围:保证输入的是合法的 IP 序列

输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1

输入:

10.0.3.193
167969729

输出:

167773121
10.3.3.193

一、问题分析

首先读题,仔细看描述中的内容,发现需求是:

1:原理:ip地址的每段可以看成是一个0-255的整数,

2.把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。

3.数据范围:保证输入的是合法的IP序列

4.输入描述:输入 1 输入IP地址

2 输入10进制型的IP地址

5.输出描述:输出 1 输出转换成10进制的IP地址

2 输出转换后的IP地址

二、解题思路

1.首先我们需要定义五个整数,int ip1,ip2,ip3,ip4,num;

分别读取我们输入中的ip地址和十进制ip地址

2.读取方式是scanf("%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);

scanf("%d", &num);

3.之后我们开始对输入进行处理

4.先将点分十进制的ip转换成十进制

我们定义一个int newip = 0;

for(int i = 0; i < 8; i++) {

newip = ip4 + (ip3  << 8) + (ip2 << 16) + (ip1 << 24);

}

5.再将十进制的ip转换为点分十进制

定义int new1,new2,new3,new4;

new1 = num >> 24;

new2 = (num >> 16) & 255;

new3 = (num >> 8) & 255;

new4 = num & 255;

6.输出

三、具体步骤

使用的语言是C

#include <stdio.h>

int main() {
    unsigned int ip1, ip2, ip3, ip4, num;
    while (scanf("%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) != EOF) {
        scanf("%u", &num);
        unsigned int newip = ip4 + (ip3 << 8) + (ip2 << 16) + (ip1 << 24);
        int n1, n2, n3, n4;
        n1 = num >> 24;
        n2 = (num >> 16) & 255;
        n3 = (num >> 8) & 255; 
        n4 = num & 255;
        printf("%u\n%d.%d.%d.%d\n", newip, n1, n2, n3, n4);
    }
    return 0;
}

20241101 11:31-20241102 10:17


原文地址:https://blog.csdn.net/bingw0114/article/details/143442992

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!