华为机试 整数与IP地址间的转换 二进制字符串转数字 区别stoi()

本文主要是介绍华为机试 整数与IP地址间的转换 二进制字符串转数字 区别stoi(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

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

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

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

输入描述:

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

输出描述:

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

示例1

输入

10.0.3.193
167969729

输出

167773121
10.3.3.193

 题目链接:https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea?tpId=37&tqId=21256&rp=1&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking&tab=answerKey

其实就是把二进制的“01001001010100101“的和十进制数字的转化,我刚开始混淆了,直接用stoi,显然是错误的。stoi是对十进制的字符串进行转换的。

#include<bits/stdc++.h>
using namespace std;
int main()
{int ip[4],IP;while(scanf("%d.%d.%d.%d\n%d",&ip[0],&ip[1],&ip[2],&ip[3],&IP)!=EOF){string str="";for(int i=0;i<4;i++){int num=ip[i];string tmp="";for(int j=0;j<8;j++){if(num&1){tmp+="1";}else{tmp+="0";}num=num>>1;}reverse(tmp.begin(),tmp.end());str+=tmp;tmp="";}long long sum=0;for(int i=0;i<32;i++){if(str[i]=='1'){sum=sum*2+1;}else{sum*=2;}}cout<<sum<<endl;str="";//复用strfor(int i=0;i<32;i++){if(IP&1){str+='1';}else{str+='0';}IP=IP>>1;//总是忘记这个}reverse(str.begin(),str.end());for(int i=0;i<4;i++){sum=0;//复用sumfor(int j=i*8;j<8*(i+1);j++){if(str[j]=='1'){sum=sum*2+1;}else{sum*=2;}}cout<<sum;if(i!=3){cout<<".";}}cout<<endl;}return 0;
}

我把二进制字符串转十进制数字的包装成一个函数,以后用到可以知道摘过去。

#include<bits/stdc++.h>
using namespace std;
long long toNum(string str)
{long long sum=0;for(int i=0;i<str.size();i++){if(str[i]=='1'){sum=2*sum+1;}else{sum*=2;}}return sum;
}
int main()
{int ip[4],IP;while(scanf("%d.%d.%d.%d\n%d",&ip[0],&ip[1],&ip[2],&ip[3],&IP)!=EOF){string str="";for(int i=0;i<4;i++){int num=ip[i];string tmp="";for(int j=0;j<8;j++){if(num&1){tmp+="1";}else{tmp+="0";}num=num>>1;}reverse(tmp.begin(),tmp.end());str+=tmp;tmp="";}long long sum=0;sum=toNum(str);cout<<sum<<endl;str="";//复用strfor(int i=0;i<32;i++){if(IP&1){str+='1';}else{str+='0';}IP=IP>>1;//总是忘记这个}reverse(str.begin(),str.end());for(int i=0;i<4;i++){sum=0;//复用sumsum=toNum(str.substr(8*i,8));cout<<sum;if(i!=3){cout<<".";}}cout<<endl;}return 0;
}

 

这篇关于华为机试 整数与IP地址间的转换 二进制字符串转数字 区别stoi()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288979

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过