当前位置: 首页 > news >正文

华为机试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


http://www.mrgr.cn/news/69804.html

相关文章:

  • Unity类银河战士恶魔城学习总结(P117 Ice And Fire Item Effec 制作一把冰火属性的剑)
  • LeetCode-215.数组中的第K个最大元素
  • 丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn
  • <el-select> :remote-method用法
  • 微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)
  • 网络技术-OpenFlow协议介绍和OVS之间的关系
  • RabbitMQ集群搭建
  • spring cloud实战总结(优雅下线、灰度发布)
  • 推荐一款批量自动识别图片方向的软件:批量校正图像方向工具
  • PostgreSQL的奥秘:深入探究事务与锁的秘密世界
  • MySQL系列之如何在Linux只安装客户端
  • 《Python网络安全项目实战》项目4 编写网络扫描程序
  • 力扣力扣力:91.解码方法
  • 「C/C++」C++标准库 之 #include<iostream> 标准输入输出
  • CSS 色彩魔法:打造绚丽网页风格
  • c++左值、右值、完美转发、万能引用、参数展开
  • MyBatis6-逆向工程、分页插件
  • 问:聊聊Spring IOC机制
  • npm常用函数定义手册(持续更新)
  • 使用 nsenter 进入 Docker 容器的操作
  • 逆向攻防世界CTF系列21-answer_to_everything
  • 【Rust练习】20.进一步深入特征
  • Debezium系列之:Incremental snapshotting设计原理
  • 临床预测模型-静态诺模/列线图(Nomogram)+校准曲线(Calibration)分析学习
  • 动态规划-两个数组的dp问题——718.最长重复子数组
  • 【leetcode练习·二叉树】用「分解问题」思维解题 I