练习4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换成字符串

来源:互联网 发布:智慧医疗 物联网 知乎 编辑:程序博客网 时间:2024/06/08 06:46

不能处理最小负数,’\0’直接覆盖即可。

#include <stdio.h>void itoa(int n,char s[]);main(){    int n=-123;    char s[5];    itoa(n,s);    printf("s:%s",s);}int si=0;void itoa(int n,char s[]){    if(n<0){        s[si++]='-';        n=-n;    }    if(n/10)        itoa(n/10,s);    s[si++]=n%10+'0';    s[si]='\0';}

if语句测试

#include <stdio.h>#include <limits.h>main(){    if(-1)        printf("a\n");    else        printf("b\n");    printf("intmin:%d",INT_MIN);}

输出a,if不是0(为正负数)则为真,否则为假。

答案可以处理最小负数,字符数组下标用静态自动变量,且在最里层赋值。实际上答案存在bug,abs(n)%10应改为abs(n%10)。

#include <stdio.h>void itoa(int n,char s[]);main(){    int n=-2147483648;    printf("s:%d\n",abs(n));    char s[11];    itoa(n,s);    printf("s:%s",s);}#include <math.h>void itoa(int n,char s[]){    static int i;    if(n/10)        itoa(n/10,s);    else{        i=0;        if(n<0)            s[i++]='-';    }    s[i++]=abs(n)%10+'0';    s[i]='\0';}

n赋值一行编译出现警告:

warning: this decimal constant is unsigned only in ISO C90

运行输出:

s:-2147483648s:-214748364(
0 0
原创粉丝点击