将一个整数n转换成字符串。例如;输入483,应得到字符串"483"。其中,要求用一个递归函数实现把一个正整数转换为字符串。
输入格式:
首先输入测试组数T,然后输入T组测试数据。每组测试数据输入一个整数n(-2^31≤n≤2^31-1)。
输出格式:
对于每组测试,输出转换后的字符串。
输入样例:
1
1234
输出样例:
1234
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
1.首先考虑一个特殊情况,即当数字为 0 时,对应的字符串为 "0"。因此,我们可以在代码中单独处理这种情况。
2.如果输入的数字 n 小于 0,则先在字符串的开头添加一个负号,然后将绝对值传入递归函数进行处理。
3.在递归函数中,首先判断数字 n 的位数是否大于 1,如果大于 1,递归调用函数并传入除最低位之外的其它数字,然后再将最低位加上 '0' 转换成字符并添加到字符串末尾。例如,对于数字 1234,递归函数会先处理 123,再把最低位的 4 转换成字符并加到字符串末尾,从而得到字符串 "1234"。
4.如果数字 n 只有一位(即 n < 10),直接将其转换成字符并添加到字符串末尾。
5.最后,在字符串末尾添加一个 '\0',表示字符串的结束。
通过递归不断地处理数字的每一位,最终可以将整个数字都转换成字符串。
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void int_to_str(int n, char *str)
{
if(n == 0) // 特殊考虑 n = 0 的情况
{
str[0] = '0';
str[1] = '\0'; // 记得要在字符串末尾加 '\0'
return;
}
if(n < 0) // 处理负数情况,先输出负号
{
*str = '-';
++str; // 在操作完一位字符后移动指针位置
n = -n;
}
if(n / 10 != 0) // 对于 n>=10 的情况,先递归处理高位数字
{
int_to_str(n / 10, str);
while(*str != '\0')
++str; // 找到字符串末尾位置,因为每次递归最低位数字都会添加到末尾位置
}
// 将本次递归中最低位的数字添加到字符串末尾
*str = (char)(n % 10 + '0');
++str; // 在操作完一位字符后移动指针位置
*str = '\0'; // 在字符串末尾加上 '\0',标志字符串的结束
}
int main()
{
int T, n;
scanf("%d", &T);
for(int i = 1; i <= T; ++i)
{
scanf("%d", &n);
char str[12]; // 转换之后的字符串长度不会超过 11 位数字和一个负号
int_to_str(n, str);
printf("%s\n", str);
}
return 0;
}