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

整数与IP地址间的转换

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

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <sstream>
#include <cmath>

int v2i(const vector<int>& num) {
    int result = 0;
    for (int i = 0; i < num.size(); i++) {
        result = result + num[i] * pow(2, i);
    }
    return result;
}

long long int ip2T(string str) {
    string num1;
    string num2;
    string num3;
    string num4;
    istringstream ip(str);
    getline(ip, num1, '.');
    getline(ip, num2, '.');
    getline(ip, num3, '.');
    getline(ip, num4);
    return stoi(num1) * pow(2, 24) + stoi(num2) * pow(2, 16) + stoi(num3) * pow(2,
            8) + stoi(num4);
}

void T2ip(string str) {
    long long int num = stoll(str);
    int i = 0;
    vector<int> ip2(32, 0);
    while (num != 0) {
        if (num % 2 != 0) {
            ip2[i] = 1;
        }
        num = num / 2;
        i++;
    }
    vector<int> num1(ip2.begin(), ip2.begin() + 8);
    vector<int> num2(ip2.begin() + 8, ip2.begin() + 16);
    vector<int> num3(ip2.begin() + 16, ip2.begin() + 24);
    vector<int> num4(ip2.begin() + 24, ip2.begin() + 32);

    cout << v2i(num4) << "." << v2i(num3) << "." << v2i(num2) << "." << v2i(
             num1) << endl;
}
int main() {
    string str1;
    string str2;
    getline(cin, str1);
    getline(cin, str2);
    long long int result1 = ip2T(str1);
    cout << result1 << endl;
    T2ip(str2);

}

基础不扎实踩坑了,vector的构造是左闭右开的一定要记住。

整体上是对输入输出做处理,没什么难度

华为机试刷题记录 文章被收录于专栏

记录一下手打代码的解题思路方便复习

全部评论

相关推荐

12-05 18:09
已编辑
广东药科大学 后端工程师
点赞 评论 收藏
分享
明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
12-19 16:52
门头沟学院
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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