華為機試 整數與IP位址間的轉換

2021-08-04 09:58:51 字數 1614 閱讀 1035

題目描述

原理:ip位址的每段可以看成是乙個0-255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成

乙個長整數。

舉例:乙個ip位址為10.0.3.193

每段數字    相對應的二進位制數

10           00001010

0            00000000

3            00000011

193            11000001

組合起來即為:00001010 00000000 00000011 11000001,轉換為10進製數就是:167773121,即該ip位址轉換後的數字就是它了。

輸入描述:輸入

1.輸入ip位址

2.輸入10進製型的ip位址

輸出描述:輸出

1.輸出轉換成10進製的ip位址

2.輸出轉換後的ip位址

示例1輸入

10.0.3.193

輸出10.3.3.193

分析:我們需要實現兩個功能,乙個是把ip位址轉換為長整數,乙個是把長整數轉換為ip位址。程式的輸入是2個字串,乙個是ip位址,乙個是長整數。把ip位址的每一段給取出來,第一段*2的24次方,第二段*2的16次方,第三段*2的8次方,第四段*1,累加就可以了。把長整數轉換為ip位址,我們需要先轉化為32位的二進位制,每8位一組轉化為ip位址。有一點我們要注意,轉換為長整數時可能超過int的範圍,要用範圍更大的long long 型別或字串。

程式:

#include#include #include #include #include using namespace std;

#define n (int)pow(2,8) //要用#include標頭檔案

long long iptolong(string s)

if(!s.empty())s.erase(s.end() - 1);

--i;

sum += k*temp; //累加每一段的值,第4段*1,第3段*256,第2段*256*256,第一段*256*256*256;

k *= n;

t = 1;

temp = 0;

} return sum;

}string longtoip(string s)

while ((temp.size() % 32) != 0) temp = '0' + temp;

int i = temp.size() - 1;

string res;

while (i >= 0)

res = '.' + to_string(sum)+res; //去掉多加的'.';

} res.erase(res.begin());

return res;

}int main(){

string a,b;

while (cin>>a&&cin>>b){

cout << iptolong(a) << endl;

cout<< longtoip(b)<

華為OJ(整數與IP位址間的轉換)

描述 原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001...

整數與ip位址間的轉換

原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合...

整數與IP位址間的轉換

原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合...