整数与IP地址间的转换

来源:互联网 发布:mac 好用的卸载软件 编辑:程序博客网 时间:2024/05/18 12:04
#include<bits/stdc++.h>using namespace std;long long StringToLonglong(string s)    {    long long sum=0;    long long k=1;    for(int i=s.size()-1;i>=0;i--)    {        sum+=(s[i]-'0')*k;        k*=10;    }    return sum;}int main(){    char a[100];    while(gets(a))        {        char *p=strtok(a,".");        vector<string>v;        while(p!=NULL)            {            string s;            for(int i=0;i<strlen(p);i++)                s+=p[i];            v.push_back(s);            p=strtok(NULL,".");        }        if(v.size()==4)            {        long long sum=0;        for(int i=0;i<v.size();i++)        sum+=atoi(v[i].c_str())*pow(2,8*(3-i));        cout<<sum<<endl;        }        else if(v.size()==1)            {            long long num=StringToLonglong(v[0]);            for(int i=0;i<4;i++)                {                if(i==3)cout<<(num%(long long)pow(2,8*(4-i))-num%(int)pow(2,(3-i)*8))/(int)pow(2,(3-i)*8)<<endl;                else cout<<(num%(long long)pow(2,8*(4-i))-num%(int)pow(2,(3-i)*8))/(int)pow(2,(3-i)*8)<<".";            }            /*            int num1=(num-num%(int)pow(2,24))/(int)pow(2,24);            int num2=(num%(int)pow(2,24)-num%(int)pow(2,16))/(int)pow(2,16);            int num3=(num%(int)pow(2,16)-num%(int)pow(2,8))/(int)pow(2,8);            int num4=num%(int)pow(2,8);            cout<<num1<<"."<<num2<<"."<<num3<<"."<<num4<<endl;            */        }    }    return 0;}