题目:将一个整数n(n >= 1)转换成字符串。例如输入483, 应输出字符串 :“483”
非递归版本:
#include<ctype.h>
#include<stdio.h>
int main() {
int nums;
char str_nums[20] = { 0 };
printf("请输入不小于1的整型数字:");
scanf_s("%d", &nums);
if (nums < 1) {
printf("请输入正确的数字!");
}
else
{
// 使用snprintf将整数转换为字符串,同时限制最大长度
snprintf(str_nums, sizeof(str_nums), "%d", nums);
}
// 打印结果
printf("数字转换为字符串: “%s” ", str_nums);
return 0;
}
递归版本
#include <stdio.h>
/// <summary>
/// int转string,从字符串的末尾开始填充
/// </summary>
/// <param name="num">整型数字</param>
/// <param name="str">字符串数组</param>
/// <param name="index">数组下标</param>
void intToStr(int num, char* str, int index) {
// 递归终止条件:当num为0或已经填充到字符串的头时,结束递归
if (num == 0 || index < 0) {
str[index + 1] = '\0'; // 添加字符串结束符
return;
}
// 递归调用,先处理num除以10的商 ,每调用一次,索引向前移动一位
intToStr(num / 10, str, index - 1);
// 处理num除以10的余数,即当前位的数字
str[index] = '0' + (num % 10);
}
int main() {
int nums;
char str_nums[20] = { 0 };
printf("请输入不小于1的整型数字:");
scanf_s("%d", &nums);
if (nums < 1) {
printf("请输入不小于1的数字!");
}
else {
// 调用递归函数,从字符串的末尾开始填充
intToStr(nums, str_nums, sizeof(str_nums) - 1); //传递数组的最大索引作为初始索引
printf("数字转换为字符串: \"%s\"\n", str_nums);
}
return 0;
}