原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址

输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1
输入:
10.0.3.193
167969729
复制
输出:
167773121

10.3.3.193

只要思路清晰,直接求解就好了,不过有坑

/******************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
void fun1(string str)
{
    int num[4];
    int i=0;
    char *p=(char*)str.data();
    while(*p!='\0')
    {
        num[i]=atoi(p);
        p=strstr(p,".");
        if(p==NULL)
            break;
        p++;
        i++;
    }
    long long sum=0;//long会溢出,需要用long long
    for(i=0;i<4;i++)
    {
        sum+=num[i]*pow(256,3-i);
    }
    printf("%ld\n",sum);
}
void fun2(long num)
{
    int buf[4]={0};
    int i=0;
    for(i=0;i<4;i++)
    {
        buf[i]=(num&(0xff<<i*8))>>i*8;
    }
    printf("%d.%d.%d.%d\n",buf[3],buf[2],buf[1],buf[0]);
}

int main()
{
    long num;
    while(1)
    {
        string str;
        cin>>str;
        if(str.empty())
            break;
        cin>>num;
        fun1(str);
        fun2(num);
    }
    
    return 0;
}