yunsheng_00 2023-11-12 16:01 采纳率: 75%
浏览 48

C语言递归数字转换字符串

用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
**输入提示:"\n输入整数:"
**输入格式:"%d"
**输出提示:"\n输出是:"
**输出转换的字符串

程序的运行示例如下:
输入整数:345
输出是:345


#include<stdio.h>
void fun(int n);
int main()
{
    int x;
    printf("\n输入整数:");
    scanf("%d",&x);
    printf("\n输出是:");
    fun(x);
    return 0;
}
void fun(int n)
{


int x;
x=n/10;
    if(x!=0)
    {fun(x);}

    putchar(n%10+'0');

}

这个代码最后一步为什么要n%10呢?可以详细解释下整个递归过程吗?谢谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-12 18:52
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    
    // 递归将整数n转换为字符串
    void intToString(int n, char str[], int len) {
        if (n < 0) {
            n = -n;
            str[0] = '-';
        }
        if (len == 0) {
            return;
        }
        if (n / 10 != 0) {
            intToString(n / 10, str, len - 1);
        }
        str[len - 1] = (n % 10) + '0';
    }
    
    int main() {
        int x;
        printf("输入整数:");
        scanf("%d", &x);
        int len = snprintf(NULL, 0, "%d", x); // 获取整数转换为字符串后的长度
        len = (x < 0) ? len + 1 : len; // 如果是负数,长度加1,给负号留位置
        char str[len];
        intToString(x, str, len); // 调用递归函数
        printf("输出是:%s\n", str);
        return 0;
    }
    

    在这个优化后的代码中,我使用了snprintf函数来获取整数转换为字符串后的长度,这样可以动态分配字符串长度,确保足够存放整数转换后的字符串。

    intToString函数通过递归的方式将整数转换为字符串,其中使用递归的方式是因为需要处理整数的各个位数。在递归的过程中,每次取当前整数的最后一位,并将其转换为对应的字符存储在字符数组中。递归的终止条件是整数变为0或者达到字符数组的末尾。

    整个递归过程中,对于输入的整数,我们不断地取其最后一位,转换成字符存储在数组中,然后递归处理剩下的部分,直到整个整数都被转换为字符串。

    对于负数,我们在最开始判断,如果是负数,则先将负号放在字符数组的开头,并将整数取绝对值进行递归转换。

    这样就能够对任意位数的整数进行递归转换为字符串的操作了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月12日