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

整数与IP地址间的转换

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

尝试用了下bitset,感觉还是做麻烦了

#include<bits/stdc++.h>

using namespace std;
unsigned long string2int(string str);
int string2int_2(string str);
int main(){

    string str;
    unsigned long n;
    while(cin>>str>>n){
        vector<string> vec;
        size_t pos = str.find(".");
        while(pos!=string::npos){
            vec.push_back(str.substr(0,pos));
            str= str.substr(pos+1);
            pos = str.find(".");
        }
        vec.push_back(str);
        bitset<8> b1(string2int(vec[0]));
        bitset<8> b2(string2int(vec[1]));
        bitset<8> b3(string2int(vec[2]));
        bitset<8> b4(string2int(vec[3]));
        string res = b1.to_string()+b2.to_string()+
                    b3.to_string()+b4.to_string();
        bitset<32> b32(res);
        cout<<b32.to_ulong()<<endl;
        
        string res2="";
        bitset<32> bb(n);
        string tmp = bb.to_string();
        int p1= (int)string2int_2(tmp.substr(0,8));
        int p2= (int)string2int_2(tmp.substr(8,8));
        int p3= (int)string2int_2(tmp.substr(16,8));
        int p4= (int)string2int_2(tmp.substr(24,8));
        res2=to_string(p1)+"."+to_string(p2)+"."+
            to_string(p3)+"."+to_string(p4);
        cout<<res2<<endl;
    }
    return 0;
}

unsigned long string2int(string str){
    unsigned long res=0;
    for(int i=0;i<str.size();++i){
        res = res*10 + (str[i]-'0');
    }
    return res;
}

int string2int_2(string str){
    int res=0;
    for(int i=0;i<str.size();++i){
        res = res*2 + (str[i]-'0');
    }
    return res;
}

全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位 >
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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