题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <cstddef> #include <iostream> #include <string> #include <vector> #include <list> #include <math.h> #include <stdio.h> #include <stdlib.h> using namespace std; string dec_bin(unsigned int dec){ string result=""; list<int> temp; int p; while(dec){ p=dec%2; dec=(dec-p)/2; temp.push_front(p); } for(int i=0;i<8-temp.size();i++){ result+='0'; } int size=temp.size(); for (int i=0;i<size; i++) { result+=temp.front()+'0'; temp.pop_front(); } // cout<<result<<endl; return result; } void handling_ip(string str){ vector<string> temp; int sub_str_len=0; for(int i=0;i<str.size();i++){ if(str[i] != '.'){ sub_str_len++; continue; } temp.push_back(str.substr(i-sub_str_len,sub_str_len)); sub_str_len=0; } if(temp.size()>0){ temp.push_back(str.substr(str.size()-sub_str_len,sub_str_len)); vector<int> vdec; for(int i=0;i<temp.size();i++){ int size=temp[i].size(); int dec=0; for(int j=0;j<size;j++){ dec+=(temp[i][j]-'0')*pow(10,size-j-1); } vdec.push_back(dec); } string sbin=""; //cout<<vdec[0]<<" "<<vdec[1]<<" "<<vdec[2]<<" "<<vdec[3]<<endl; for(int i=0;i<vdec.size();i++){ sbin+=dec_bin(vdec[i]); } // cout<<sbin<<endl; // int result=stoi(sbin,nullptr,2); unsigned int result=0; for(int i=0;i<sbin.size();i++){ result+=(sbin[i]-'0')*pow(2,sbin.size()-i-1); } cout<<result<<endl; } } void handling_num(unsigned int num){ list<int> temp; while(num){ int p=num%2; num=(num-p)/2; temp.push_front(p); } while(temp.size()<32){ temp.push_front(0); } int len=0; vector<int> rel; int add=0; for(int i=0;i<32;i++){ if(len<8){ add+=temp.front()*pow(2,8-len-1); len++; temp.pop_front(); } if(len==8){ rel.push_back(add); add=0; len=0; } } cout<<rel[0]<<'.'<<rel[1]<<'.'<<rel[2]<<'.'<<rel[3]<<endl; } int main() { string str; int dec; while (cin >> str) { // 注意 while 处理多个 case size_t found=str.find('.'); if(found != string::npos){ handling_ip(str); }else{ unsigned int num=atoi(str.c_str()); // cout<<num<<endl; handling_num(num); } } return 0; } // 64 位输出请用 printf("%lld")