内存:128  时间:1

题目描述

小狼是公司新来的网络工程师,负责维护公司的网络系统。
小狼在熟悉系统时发现公司的存储在数据库中的IP地址不是他熟悉的 xxx.xxx.xxx.xxx 的形式,而是用一个整数表示!
OMG,这可把小狼愁坏了,不过经过他辛苦的探寻,终于在系统日志中找到了每一个整数对应的真实IP地址,比如下面几个IP地址:

整数                  真实IP地址
360072789       21.118.70.85
1145324612     68.68.68.68

真实IP地址找到了,但是小狼不能每次都去系统日志里查找吧!这太费劲了!
于是他想写一个程序将整数自动转换成他熟悉的IP地址形式,机智的你能帮助小狼猜到转换的方法并写出这个程序吗?

由于系统日志中可能存在不合法数据,所以你要考虑这个程序的健壮性。如果无法转换,输出-1。

输入

第1行,n,表示下面有n个整数
第2行至n+1行,每行一个整数

输出

输出n行。每行一个ip地址

样例输入

3
360072789
1145324612
12345678901

样例输出

21.118.70.85
68.68.68.68
-1

提示

1.IP地址范围为 0.0.0.0 ~ 255.255.255.255
2.二进制
3.long long int , %lld

代码如下

#include<iostream>
#include<cstdio>
using namespace std;
int b[4];
void dfs(long long n,int num)
{
    if(n==0&&num==4)
    {
        for(int i=3;i>=0;i--)
        {
            if(i==0)
                printf("%d
",b[i]);
                else
                    printf("%d.",b[i]);
        }
        return;
    }
    if(n%256>256||(n!=0&&num==4))
    {
       printf("-1
");
       return;
    }
    b[num]=n%256;
    dfs(n/256,num+1);
}
int main()
{
    long long n;
    int sum;
    cin>>sum;
    for(int i=1;i<=sum;i++)
    {
        cin>>n;
        if(n<0)
        {
            printf("-1
");
            continue;
        }
        dfs(n,0);
    }
    return 0;
}

代码来源于互联网,仅供参考!