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

华为机试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.kler.cn/a/387449.html

相关文章:

  • XML Schema 字符串数据类型
  • Day 63 || 拓扑排序、dijkstra
  • 相亲小程序(源码+文档+部署+讲解)
  • 【信号处理】基于联合图像表示的深度学习卷积神经网络
  • 动态规划 —— dp 问题-买卖股票的最佳时机IV
  • 大模型 | 2024年中国智能算力行业白皮书 | 附PDF免费下载
  • 【复旦微FM33 MCU 开发指南】ADC
  • 微服务中常用分布式锁原理及执行流程
  • delphi 编译多语言工程 error RC2104 : undefined keyword or key name:
  • js id字符串转数组
  • 学习threejs,使用JSON格式保存和加载整个场景
  • Chromium127编译指南 Mac篇(二)- 安装Xcode
  • 【工具】VeraCrypt|Windows 怎么给磁盘文件夹加密码?开源磁盘加密工具 VeraCrypt 教程
  • 青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
  • 暮雨直播 1.3.2 | 内置直播源,频道丰富,永久免费
  • SpringBoot Java教学辅助平台:构建高效学习环境
  • LeetCode每日一题3235---判断矩形的两个角落是否可达
  • hadoop+spark中8088,18080,19888,4040端口页面的区别
  • Windows Server服务器上安装的MySQLl数据库连接遇到10055错误
  • FastReport将停止 .NET Framework 上的 WebReport 更新
  • 【JS】如何设置一个只读属性
  • 手把手教你写Unity3D飞机大战(5)玩家子弹射击之显示瞄准图标
  • 工程数学线性代数(同济第七版)附册课后习题答案PDF
  • 【重学 MySQL】八十三、掌握循环结构 LOOP、WHILE、REPEAT 的高效应用
  • 使用git lfs向huggingface提交较大的数据或者权重
  • SQLite的BLOB数据类型与C++二进制存储学习记录