题解 | 整数与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;

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务