嗯c语言递归法将整数转换成字符串输出

![img](https://img-/


#include <stdio.h>
#include <string.h>

void convert_to_string(int n, char* str) {
    if (n == 0return;  // 递归终止条件

    // 将余数加到字符串末尾
    str[strlen(str)] = ' ';  // 在数字之间添加空格
    str[strlen(str)] = n % 10 + '0';

    // 递归调用
    convert_to_string(n / 10, str);
}

int main() {
    int n;
    scanf("%d", &n);

    char str[100] = "";  // 字符串初始化为空字符串

    if (n < 0) {
        // 如果是负数,在字符串开头添加负号
        str[0] = '-';
        n = -n;
    }

    // 将数字转换为字符串
    convert_to_string(n, str);

    // 反转字符串
    for (int i = 0, j = strlen(str) - 1; i < j; i++, j--) {
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }

    // 在字符串开头添加 "output: "
    char output[100] = "output: ";
    strcat(output, str);

    // 输
printf("%s\n", output);return 0;
}

嗯,现在就是负号都要放在前头。嗯,但是输出就是在后头。


int main()
{
   int n, s = 0;
   scanf("%d", &n);
   char str[100] = ""; // 字符串初始化为空字符串
   if (n < 0)
   {
      // 如果是负数,在字符串开头添加负号
      str[0] = '-';
      str[1] = ' ';
      n = -n;
      s = 2;
   }
   // 将数字转换为字符串
   convert_to_string(n, str + s);
   // 反转字符串
   for (int i = s, j = strlen(str) - 1; i < j; i++, j--)
   {
      char temp = str[i];
      str[i] = str[j];
      str[j] = temp;
   }
   // 在字符串开头添加 "output: "
   // char output[100] = "output: ";
   // strcat(output, str);
   // 输
   printf("output: %s\n", str);
   return 0;
}

你在最后for循环进行字符串倒置的时候,如果str[0]是'-',那么for就要从i=1开始啊。这样负号才能保持在第一个,否则被你交换到末尾去了