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

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

  运行结果为:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏null的专栏

Python技巧——list与字符串互相转换

在Python的编程中,经常会涉及到字符串与list之间的转换问题,下面就将两者之间的转换做一个梳理。 1、list转换成字符串 命令:list() 例子: ?...

27630
来自专栏WebDeveloper

php缓冲区与header函数之间的秘密

我们在实际的开发中,是否听说过在header之前不能有任何的实际输出。甚至有的认为header函数必须写在代码的最前面。可是你是否试验过header函数之前输出...

13820
来自专栏Linyb极客之路

深入理解和探究Java类加载机制

java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java 类,即 ...

12130
来自专栏青玉伏案

窥探Swift编程之错误处理与异常抛出

在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽。今天博客的主题就是系统的搞一下Swi...

21650
来自专栏Young Dreamer

简易前端模板引擎

模板解析 解决的问题: 将data和js+html片段解析成html片段,完成赋值和js逻辑,如下所示: 输入: var data = {     name: ...

230100
来自专栏linux驱动个人学习

inline函数不能在for循环中使用的原因

inline函数的作用继承了宏定义的优点,没有了参数压栈,代码生成等一部分操作,并且摒弃了没有检查编译规则的缺点; 另外要注意,内联函数一般只会用在函数内容非常...

37740
来自专栏Python小屋

Python正则表达式案例一则:单词非两端字符改为小写

问题描述:给定一段英文,要求把其中所有单词除两端字符之外的其他字母都改为小写。 技术要点: 1)re模块的sub()函数用法; 2)match对象的group(...

30560
来自专栏小樱的经验随笔

【批处理学习笔记】第十五课:语句结构(1)

    类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。   if语句(选择结构)     if语...

29390
来自专栏编程

Python面向对象6:​isinstance、super、有序字典

1、isinstance(对象名,类),查看对象是不是类的实例。 案例1:isinstance(对象名,类) classFoo: print('hh') obj...

20480
来自专栏Jackson0714

【.Net底层剖析】3.用IL来理解属性

34770

扫码关注云+社区

领取腾讯云代金券