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


      如果自己写函数,不使用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
    ",num,str);
     11     myitoa(100,str,10);
     12     printf("number %d  binary %s
    ",num,str);
     13     myitoa(100,str,8);
     14     printf("number %d  binary %s
    ",num,str);
     15     myitoa(100,str,2);
     16     printf("number %d  binary %s
    ",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 = '';
    103     return 0;
    104 }

      运行结果为:

  • 相关阅读:
    [转]Java中实现自定义的注解处理器
    [转]IntelliJ IDEA 自定义方法注解模板
    [转]Intellij Idea自动添加注释的方法
    C++中substr的用法
    C++中find()函数和rfind()函数的用法
    无符号类型
    标准库string与C风格字符串
    vector对象
    string 类(二)
    string类
  • 原文地址:https://www.cnblogs.com/xing901022/p/3799137.html
Copyright © 2020-2023  润新知