网络工程师
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。