[程式設計題]整數與ip位址間的轉換
原理:ip位址的每段可以看成是乙個0-255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成乙個長整數。
舉例:乙個ip位址為10.0.3.193
每段數字 相對應的二進位制數
10 00001010
0 00000000
3 00000011
193 11000001
組合起來即為:00001010 00000000 00000011 11000001,轉換為10進製數就是:167773121,即該ip位址轉換後的數字就是它了。
每段可以看成是乙個0-255的整數,需要對ip位址進行校驗
輸入描述:
輸入輸出描述:1 輸入ip位址
2 輸入10進製型的ip位址
輸出輸入例子:1 輸出轉換成10進製的ip位址
2 輸出轉換後的ip位址
10.0.3.193輸出例子:167969729
16777312110.3.3.193
解題思路
考察進製轉換。
法1、以字串形式存放二進位制來進行處理
法2、通過位運算來完成進製轉換
注意事項:
該十進位製長整數用有符號整數存放會出錯,需要使用無符號整數unsigned。
法1:#include #include using namespace std;
/*十進位制轉二進位制___指定位數*/
string decimaltobinary( unsigned long n, string str )
return str;
}/*二進位制轉十進位制*/
unsigned long binarytodecimal( string str )
return sum;
}int main()
coutint main(){
unsigned a[4];//此處不使用unsigned會出錯
unsigned long n;
char ch;
while( cin>>a[0]>>ch>>a[1]>>ch>>a[2]>>ch>>a[3] ){
cin>>n;
/*對二進位制各位元組左移後求並集*/
unsigned long sum = (a[0]<<24) | (a[1]<<16) | (a[2]<<8) | a[3] ;
cout<> 24;
a[1] = ( n & 0x00ff0000 ) >> 16;
a[2] = ( n & 0x0000ff00 ) >> 8;
a[3] = ( n & 0x000000ff ) ;
cout<
整數與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位址間的轉換
題目 乙個長整數。每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 本題含有多組輸入用例,每組用例需要你將乙個ip位址轉換為整數 將乙個整數轉換為ip位址 while true try str1 10.0.3.193 spli...