5-23 IP地址轉換 (20分) (位操作)
阿新 • • 發佈:2019-01-02
5-23 IP地址轉換 (20分)
老師:
一個IP地址是用四個位元組(每個位元組8個位)的二進位制碼組成。請將32位二進位制碼錶示的IP地址轉換為十進位制格式表示的IP地址輸出。
輸入格式:
輸入在一行中給出32位二進位制字串。
輸出格式:
在一行中輸出十進位制格式的IP地址,其由4個十進位制陣列成(分別對應4個8位的二進位制數),中間用“.”分隔開。
輸入樣例:
11001100100101000001010101110010
輸出樣例:
204.148.21.114
//老師的辦法,巧妙;自己的,繁瑣
//學語言要活學活用,充分利用語言特性,簡化程式碼;就像此處的C語言位運算;
自己:
#include <stdio.h> #include <stdlib.h> #include <math.h>" int main() { char ch[33]; int num[4]; gets(ch); int i,j=0; int number=0; for(i=31;i>=24;i--){ number+=(ch[i]-'0')*(int)pow(2,j); j++; } num[3]=number; j=0,number=0; for(i=15;i>=8;i--){ number+=(ch[i]-'0')*(int)pow(2,j); j++; } num[1]=number; j=0,number=0; for(i=23;i>=16;i--){ number+=(ch[i]-'0')*(int)pow(2,j); j++; } num[2]=number; j=0,number=0; for(i=15;i>=8;i--){ number+=(ch[i]-'0')*(int)pow(2,j); j++; } num[1]=number; j=0,number=0; for(i=7;i>=0;i--){ number+=(ch[i]-'0')*(int)pow(2,j); j++; } num[0]=number; printf("%d.%d.%d.%d\n",num[0],num[1],num[2],num[3]); return 0; }
老師:
void tran(){ int num=0; for(int i=0; i<8; i++){ num = num << 1; num = num | (getchar()-'0');//注重二進位制及其運算的巧妙運用 } printf("%d",num); } int main(){ tran(); putchar('.'); tran(); putchar('.'); tran(); putchar('.'); tran(); return 0; }