HJ整数与IP地址间的转换
有勇气的牛排
1212
算法
2022-06-22 13:06:31
描述
原理: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
牛客 Python
def ip2num(ip):
res = ''
for i in ip.split('.'):
res = res + bin(int(i))[2:].rjust(8, "0")
return int('0b' + res, 2)
def num2ip(num):
result = ''
bin_str = bin(int(num))[2:]
bin_str = bin_str.rjust(32, '0')
res = ''
for item in range(4):
res = res + "." + str(int('0b' + bin_str[item * 8:item * 8 + 8], 2))
return res[1:]
if __name__ == '__main__':
try:
print(ip2num(input()))
print(num2ip(input()))
except:
pass
<p><strong>描述</strong><br />
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成<br />
一个长整数。<br />
举例:一个ip地址为10.0.3.193</p>
<table>
<thead>
<tr>
<th>每段数字</th>
<th>相对应的二进制数</th>
</tr>
</thead>
<tbody>
<tr>
<td>10</td>
<td>00001010</td>
</tr>
<tr>
<td>0</td>
<td>00000000</td>
</tr>
<tr>
<td>3</td>
<td>00000011</td>
</tr>
<tr>
<td>193</td>
<td>11000001</td>
</tr>
</tbody>
</table>
<p>组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。</p>
<p>数据范围:保证输入的是合法的 IP 序列</p>
<p><strong>输入描述:</strong><br />
输入<br />
1 输入IP地址<br />
2 输入10进制型的IP地址</p>
<p><strong>输出描述:</strong><br />
输出<br />
1 输出转换成10进制的IP地址<br />
2 输出转换后的IP地址</p>
<p><strong>示例1</strong></p>
<pre><div class="hljs"><code class="lang-shell">输入:
10.0.3.193
167969729
输出:
167773121
10.3.3.193
</code></div></pre>
<p>牛客 Python</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">ip2num</span>(<span class="hljs-params">ip</span>):
res = <span class="hljs-string">''</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> ip.split(<span class="hljs-string">'.'</span>):
res = res + <span class="hljs-built_in">bin</span>(<span class="hljs-built_in">int</span>(i))[<span class="hljs-number">2</span>:].rjust(<span class="hljs-number">8</span>, <span class="hljs-string">"0"</span>)
<span class="hljs-keyword">return</span> <span class="hljs-built_in">int</span>(<span class="hljs-string">'0b'</span> + res, <span class="hljs-number">2</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">num2ip</span>(<span class="hljs-params">num</span>):
result = <span class="hljs-string">''</span>
bin_str = <span class="hljs-built_in">bin</span>(<span class="hljs-built_in">int</span>(num))[<span class="hljs-number">2</span>:]
bin_str = bin_str.rjust(<span class="hljs-number">32</span>, <span class="hljs-string">'0'</span>)
res = <span class="hljs-string">''</span>
<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">4</span>):
res = res + <span class="hljs-string">"."</span> + <span class="hljs-built_in">str</span>(<span class="hljs-built_in">int</span>(<span class="hljs-string">'0b'</span> + bin_str[item * <span class="hljs-number">8</span>:item * <span class="hljs-number">8</span> + <span class="hljs-number">8</span>], <span class="hljs-number">2</span>))
<span class="hljs-keyword">return</span> res[<span class="hljs-number">1</span>:]
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
<span class="hljs-comment"># while True:</span>
<span class="hljs-keyword">try</span>:
<span class="hljs-built_in">print</span>(ip2num(<span class="hljs-built_in">input</span>()))
<span class="hljs-built_in">print</span>(num2ip(<span class="hljs-built_in">input</span>()))
<span class="hljs-comment"># print(ip2num("10.0.3.193"))</span>
<span class="hljs-comment"># print(num2ip("167969729"))</span>
<span class="hljs-keyword">except</span>:
<span class="hljs-keyword">pass</span>
</code></div></pre>
留言