題目描述
原理: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 組合...