张德长

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

牛客[编程题] HJ33 整数与IP地址间的转换

HJ33 整数与IP地址间的转换
中等  通过率:30.70%  时间限制:1秒  空间限制:32M
 

描述

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

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
 
数据范围:保证输入的是合法的 IP 序列

 

输入描述:

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

输出描述:

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

示例1

输入:
10.0.3.193
167969729
输出:
167773121
10.3.3.193

 

 

using System;
public class Program
{
public static void Main()
{
string line; string line1 = null, line2 = null;
while ((line = System.Console.ReadLine()) != null)
{ // 注意 while 处理多个 case
if (line1 == null)
{
line1 = line;
}
else
{
line2 = line;
string b1 = string.Empty;
foreach (var item in line1.Split("."))
{
b1 += DecimalToBinary(item,8);
}
string d1 = BinaryToDecimal(b1);
Console.WriteLine(d1);
string b2 = DecimalToBinary(line2, 32);
string d2 = string.Empty;
for (int i = 0; i < 4; i++)
{
d2 += BinaryToDecimal(b2.Substring(i*8, 8));
if (i != 3)
{
d2 += ".";
}
}
Console.WriteLine(d2);
}
}
}
static string DecimalToBinary(string d, int len)
{
string b = string.Empty;
long n = long.Parse(d);
while (n > 0)
{
b= b.Insert(0, (n % 2).ToString());
n /= 2;
}
len -= b.Length;
for (int i = 0; i < len ; i++)
{
b = b.Insert(0, "0");
}
return b;
}
static string BinaryToDecimal(string b)
{
long n = 0;
for (int i = 0; i < b.Length; i++)
{
if (b[b.Length-1 - i] == '1')
{
n += Pow(2, i);
}
}
return n.ToString();
}
static long Pow(long a, long n)
{
long res = 1;
for (int i = 0; i < n; i++)
{
res *= a;
}
return res;
}
}

 

posted on   张德长  阅读(27)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示