牛客[编程题] 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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律