网络工程师

时间: 1ms        内存:128M

描述:

小狼是公司新来的网络工程师,负责维护公司的网络系统。
小狼在熟悉系统时发现公司的存储在数据库中的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

提示:

参考答案(内存最优[1092]):

#include <stdio.h> 
int main() 
{ 
int n; 
long long int x,d=0xffffffff; 
scanf("%d",&n); 
while(n--) 
{ 
scanf("%lld",&x); 
if(x>d||x<0) 
{ 
printf("-1\n"); 
continue; 
} 
printf("%lld.%lld.%lld.%lld\n",x/16777216,x%16777216/65536,x%65536/256,x%256); 
} 
return 0; 
} 

参考答案(时间最优[0]):

#include <stdio.h>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        long long n;
        scanf("%lld",&n);
        if(0<=n && n<=0xffffffff)
        {
            int p[4];
            p[0] = n>>24 & 0xff;
            p[1] = n>>16 & 0xff;
            p[2] = n>>8 & 0xff;
            p[3] = n & 0xff;
            printf("%d.%d.%d.%d\n",p[0],p[1],p[2],p[3]);
        }
        else
        {
            printf("-1\n");
        }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。