题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <math.h>

using namespace std;

string TenToBina(string& num, int length)
{
    unsigned int n = atoi(num.c_str());
    
    string res = "";
    while (n != 0) {
        res += ('0' + n % 2);
        n = n / 2;
    }
    while (res.size() < length) {
        res += '0';
    }
    reverse(res.begin(), res.end());
    //cout << res << endl;
    return res;
}

unsigned int IpToNum(vector<string>& vec)
{
    string res = "";
    for (int i = 0; i < vec.size(); i++) {
        res += TenToBina(vec[i], 8);
    }
    //cout << res << endl;
    unsigned int n = 0;
    reverse(res.begin(), res.end());
    for (int i = 0; i < res.size(); i++) {
        n += (pow(2, i) * (res[i] - '0'));
    }
    return n;
}

string BinaToTen(string& bina)
{
    reverse(bina.begin(), bina.end());
    unsigned int n = 0;
    for (int i = 0; i < bina.size(); i++) {
        n += (pow(2, i) * (bina[i] - '0'));
    }
    return to_string(n);
}

string NumToIp(string& num)
{
    string binary = TenToBina(num, 32);
    vector<string> vec;
    for (int i = 0; i < 32;) {
        vec.push_back(binary.substr(i, 8));
        i += 8;
    }
    
    string res = "";
    for (int i = 0; i < vec.size(); i++) {
        res += BinaToTen(vec[i]);
        if (i != vec.size() - 1) {
            res += '.';
        }
    }
    return res;
}

int main()
{
    string ip, num, item;
    while (cin >> ip >> num) {
        stringstream ss(ip);
        vector<string> vec;
        vec.clear();
        while(getline(ss, item, '.')) {
            vec.push_back(item);
        }
        cout << IpToNum(vec) << endl;
        cout << NumToIp(num) << endl;
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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