您的位置:首页 > 其它

整数与IP地址间的转换

2017-06-09 18:11 204 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法