题解 | 整数与IP地址间的转换
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
我个人觉得我的代码,绝对能看懂。简易版
//1.输入
//2.1转化为数字
//2.2每一个数字转化为二进制
//2.3二进制再转为十进制
//3.1 十进制数转化为二进制数
//3.2 八个一组,八个一组,转化为数字
//3.3 二进制化十进制
//3.4 加上点
#include<bits/stdc++.h>
using namespace std;
// 功能一 数字转二进制
string erjinz(int m){
string result;
for(int i = 7;i>= 0;i--){
result += (m & (1<<i)) ? '1': '0';
}
return result;
}
// 功能二 数字转32 位的二进制=-66666670
string erjinz32 (long long m){
string result;
for(int i = 31;i>=0;i--){
result += (m & (1LL<<i)) ? '1' :'0';
}
return result;
}
// 功能三 二进制转十进制
long long shijinz(string m){
long long value = 0;
for(char a : m){
if(a != ' '){
value = value * 2 + (a-'0');
}
}
return value;
}
int main(){
string s;
cin >> s;
string peng ="";
stringstream ss (s);
string peng1;
while(getline(ss,peng1,'.')){
int m = stoi(peng1);
string mm = erjinz(m);
peng += mm;
}
long long shijinzshu = shijinz(peng);
cout << shijinzshu <<endl;
long long n;
cin >> n;
vector <int> aa;
string a = erjinz32(n);
for(int i = 0;i<a.size();i+=8){
string m = a.substr(i,8);
// 每一个变成二进制数字了
int c = shijinz(m);
aa.push_back(c);
}
for(int i = 0;i<aa.size();i++){
if(i!= 0) cout << '.';
cout <<aa[i];
}
cout <<endl;
return 0;
}

查看1道真题和解析