数字按照不同格式转换成字符串

  如果自己写函数,不使用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 }

 

  运行结果为:

数字按照不同格式转换成字符串

你可能感兴趣的:(字符串)