1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #include <stdio.h> #include <string.h>
#define MaxChar 100
int PF(int k,int i){ int temp=1; if (i==0)return 1; while(i>0){ temp*=k;--i; } return temp; }
int type_judge(char * str){ if ((str[strlen(str)-1]=='b')||(str[strlen(str)-1]=='B'))return 2; else if (((str[0]=='0')&&(str[1]=='x'))||((str[0]=='0')&&(str[1]=='X')))return 16; else return 10; }
int b2D(char * str){ int temp=0; for (int i = 0; i < strlen(str)-1; ++i) { temp+=(str[i]-'0')*PF(2,strlen(str)-2-i); } return temp; }
int d2D(char * str){ int temp=0; for (int i = 0; i < strlen(str); ++i) { temp+=(str[i]-'0')*PF(10,strlen(str)-1-i); } return temp; }
int x2D(char * str){ int temp=0; for (int i = 2; i < strlen(str); ++i) { if (str[i]<='9'&&str[i]>='0')temp+=(str[i]-'0')*PF(16,strlen(str)-1-i); if (str[i]>='a'&&str[i]<='f')temp+=(str[i]-87)*PF(16,strlen(str)-1-i); if (str[i]>='A'&&str[i]<='F')temp+=(str[i]-55)*PF(16,strlen(str)-1-i); } return temp; }
void binprintf(int data){ int i,k=0; char bindata[MaxChar]; for(i=data;i>=2;){ bindata[k]=i%2+48; i=(i-(i%2))/2; k++; if (i==1) { bindata[k] = 49; bindata[k+1] = '\0'; } } bindata[k+1] = '\0'; for (int j = 0; j < strlen(bindata); ++j) { printf("%c",bindata[strlen(bindata)-1-j]); } printf("B"); }
void main() { char userdata[MaxChar]; char bindata[MaxChar]; int inputtype; int outputdata; scanf("%s",userdata); printf("您的输入是: "); printf("%s\n",userdata); printf("进制类型是: %d进制\n",type_judge(userdata)); printf("--------------------------------\n"); inputtype=type_judge(userdata); if (inputtype==2){ outputdata=b2D(userdata); printf("转化为十进制为: %d\n",outputdata); printf("转化为十六进制为: 0x%x",outputdata); } if (inputtype==10){ outputdata=d2D(userdata); printf("转化为十六进制为: 0x%x\n",outputdata); printf("转化为二进制为: "); binprintf(outputdata); } if (inputtype==16){ outputdata=x2D(userdata); printf("转化为十进制为: %d\n",outputdata); printf("转化为二进制为: "); binprintf(outputdata); } }
|