进制转换

n进制转十进制:a*n^y + b*n^(y-1) + ... + x*n^0
十进制转n进制:除以n,取商和余......

1
#include <stdio.h> 2 3 void tobase(int, int); 4 int main() 5 { 6 tobase(33, 16); 7 return 0; 8 } 9 10 void tobase(int value, int base) 11 { 12 static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 13 char buf[(sizeof(long) << 3) + 1]; 14 char *ptr, *end; 15 16 if (base < 2 || base > 36) { 17 printf("error base range \n"); 18 } 19 20 end = ptr = buf + sizeof(buf) - 1; 21 *ptr = '\0'; 22 do { 23 *--ptr = digits[value % base]; 24 value /= base; 25 } while (ptr > buf && value); 26 27 printf("base: %d, => %s \n", base, ptr); 28 }
 1 #include <stdio.h>  
 2 #include <stdlib.h>  
 3 #include <ctype.h>  
 4 #include <string.h>  
 5 #define MAX_CONVERT_NUM_LEN 50  
 6 char m2n(char m, char n, char *mNum, char *nNum)  
 7 {  
 8     char *np=nNum;  
 9     char JINZHI[37] ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
10     unsigned int dec;  
11     char shang[MAX_CONVERT_NUM_LEN], tt[MAX_CONVERT_NUM_LEN];  
12     char *sp, *tp;  
13     char getm, temp;  
14   
15     if(m<2 || m>36 || n<2 || n>36)  
16         return -1;  
17   
18     strcpy(shang, mNum);  
19     sp = shang;  
20     while(*sp != '\0'){  
21         dec = 0;  
22         *tt = '\0';   
23         tp = tt;  
24         while(*sp != '\0'){  
25             getm = *sp > '9' ? (toupper(*sp++)-'A'+10) : ((*sp++)-'0');  
26             if(getm < 0 || getm >= m )  
27                 return -1;  
28             dec = dec * m + getm;  
29             if((temp=dec/n) != 0 || *tp != '\0')  
30                 *tp++ = JINZHI[temp];  
31             dec %= n;  
32         }  
33         *np++ = JINZHI[dec];  
34         *tp = '\0';  
35         strcpy(shang, tt);  
36         sp = shang;  
37     }  
38     *np-- = '\0';  
39     while(np>nNum){  
40         temp =*np;  
41         *np-- =*nNum;  
42         *nNum++ = temp;  
43     }  
44     return 0;  
45 }  
46   
47 int main(int argc, char **argv)   
48 {  
49     char *m="123004560007890000abcdEF";  
50     char n[MAX_CONVERT_NUM_LEN];  
51       
52     if(strlen(m) > 0 && 0 == m2n(16, 10, m, n))  
53         printf("%s \n",n);  
54     else  
55         printf("error!!!\n");  
56   
57     system("pause");  
58     return 0;  
59

 

 
posted @ 2016-08-08 16:50  balingybj  阅读(158)  评论(0)    收藏  举报