1421 整数转字符串(递归)

本文介绍了一个将整数转换为字符串的C语言程序实现。该程序通过计算数字的位数并逆序填充字符数组来完成转换过程,支持负数转换,并通过循环输入输出进行多次转换演示。

这里写图片描述
这里写图片描述

#include <stdio.h>
int main() {
    int t,num;
    char str[20];
    void itostr(int num,char str[]) ;
    scanf("%d",&t);
    while(t--) {
        scanf("%d",&num);
        itostr(num,str);
        printf("%s\n",str);
    }
    return 0;
}
void itostr(int num,char str[]) {
    int len,weight,first,i;
    char num2char(int num) ;
    //几位数
    for(len=1,weight=10; num/weight!=0; len++) {
        weight = weight*10;
    }
    //printf("len=%d\n",len);

//确认长度与首位
    if(num<0) {
        len++;
        str[0]='-';
        first = 1;
    } else {
        first = 0;
    }

    //获取各个位 从后往前
    str[len]='\0';
    for(i=len-1,weight=1; i>=first; i--) {
        //printf("str[%d]=%d %c\n",i,(num/weight) % 10,str[i]);
        str[i]= num2char((num/weight) % 10);
        weight = weight*10;
    }
}

//把单个数字转化成字符
char num2char(int num) {
    if(num<0) {
        num=(-1)*num;
    }
    //num>=0 && num<10
    char nc ='0'+ num;
    return nc;
}
### 使用递归实现整数字符串 为了将一个整数 `n` 换成字符串,可以通过递归的方式处理每一位数字。每次递归调用会处理当前最低位的数字,并将其换为字符形式加入到结果字符串中。 #### 方法概述 当给定一个整数 `n` 时,如果该整数小于等于零,则返回相应的符号和绝对值对应的字符串表示;否则,先获取除去了最后一位后的部分的结果再拼接上这一位所代表的字符[^1]。 下面是具体的 C 语言代码示例: ```c #include <stdio.h> #define MAX_SIZE 50 // 假设最大长度不超过50个字符 void itoa_recursive(int n, char s[]) { static int i; // 定义静态变量用于记录位置 if (n / 10) { itoa_recursive(n / 10, s); // 处理更高位的部分 } s[i++] = abs(n % 10) + '0'; // 将当前位置设置为当前位上的字符 } // 辅助函数来打印最终得到的字符串并重置索引i void print_result(char str[]){ printf("%s\n",str); } ``` 需要注意的是,在上述例子中的 `itoa_recursive()` 函数并没有考虑负号的情况以及结束符 '\0' 的添加。实际应用中还需要完善这些细节。 对于完整的解决方案来说,应该增加对特殊情况的支持(比如正负号),并且确保生成合法的C风格字符串(带有终止符'\0')。 另外一种更简洁的做法是在 Python 中完成同样的功能: ```python def num_to_str(num): if num < 0: return '-' + num_to_str(-num) elif num >= 10: return num_to_str(num // 10) + chr(ord('0') + num % 10) else: return chr(ord('0') + num) print(num_to_str(183)) # 输出:"183" ``` 此版本不仅支持非负整数而且也能够正确处理带符号的整数情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值