数字按照不同格式转换成字符串
如果自己写函数,不使用itoa怎么判断呢?
我们用通常的办法,对数字进行每位的除商,得到后与字符'0'相加。
flag = 0; for(i=0;i<6;i++){ tmp = int(num/pow(10,5-i)); if(tmp != 0){ *str = 1; flag = 1; } if(*str != 0 || flag){ *str++ = tmp+'0'; num = num%int(pow(10,5-i)); } }
要注意的就是,我们设置标志位flag,为1之前的所有0都不输出。当flag为1时,进行转换。
全部代码可以参考:
1 #include <stdio.h> 2 #include <stdlib.h> 3 //蔡健雅 双栖动物 4 int myitoa(int num,char *str,int n); 5 int pow(int num,int n); 6 int main(){ 7 int num = 100; 8 char str[15]; 9 myitoa(100,str,16); 10 printf("number %d binary %s\n",num,str); 11 myitoa(100,str,10); 12 printf("number %d binary %s\n",num,str); 13 myitoa(100,str,8); 14 printf("number %d binary %s\n",num,str); 15 myitoa(100,str,2); 16 printf("number %d binary %s\n",num,str); 17 getchar(); 18 return 0; 19 } 20 int pow(int num,int n){ 21 int i; 22 int result = 1; 23 for(i=0;i<n;i++){ 24 result *= num; 25 } 26 return result; 27 } 28 int myitoa(int num,char *str,int n){ 29 if(str == NULL) 30 return -1; 31 if(num < 0){ 32 *str++ = '-'; 33 num = 0 - num; 34 } 35 int i; 36 int tmp = 0; 37 int flag = 0; 38 *str = 0; 39 switch(n){ 40 case 16: 41 flag = 0; 42 for(i=0;i<8;i++){ 43 tmp = int(num/pow(16,7-i)); 44 if(tmp != 0){ 45 *str = 1; 46 flag = 1; 47 } 48 if(*str != 0 || flag){ 49 if(tmp >= 0 && tmp <= 9){ 50 *str++ = tmp+'0'; 51 }else if(tmp >= 10 && tmp <= 15){ 52 *str++ = tmp-10+'A'; 53 } 54 num = num%int(pow(16,7-i)); 55 } 56 } 57 break; 58 case 10: 59 flag = 0; 60 for(i=0;i<6;i++){ 61 62 tmp = int(num/pow(10,5-i)); 63 if(tmp != 0){ 64 *str = 1; 65 flag = 1; 66 } 67 if(*str != 0 || flag){ 68 *str++ = tmp+'0'; 69 num = num%int(pow(10,5-i)); 70 } 71 } 72 break; 73 case 2: 74 flag = 0; 75 for(i=0;i<32;i++){ 76 tmp = int(num/pow(2,31-i)); 77 if(tmp != 0){ 78 *str = 1; 79 flag = 1; 80 } 81 if(*str != 0 || flag){ 82 *str++ = tmp+'0'; 83 num = num%int(pow(2,31-i)); 84 } 85 } 86 break; 87 case 8: 88 flag = 0; 89 for(i=0;i<10;i++){ 90 tmp = int(num/pow(8,9-i)); 91 if(tmp != 0){ 92 *str = 1; 93 flag = 1; 94 } 95 if(*str != 0 || flag){ 96 *str++ = tmp+'0'; 97 num = num%int(pow(8,9-i)); 98 } 99 } 100 break; 101 } 102 *str = '\0'; 103 return 0; 104 }
运行结果为: