题目:将一个整数转化为字符串,负数输出负号,并用递归解决。
·思路:
1.若输入为0,则直接输出;
2.解决负号问题;
3.由于我们需要从高位到地位依次输出,所以可以用到整除(/)和取余(%)操作。
·递归体:
对num/10==0?进行判断:
若num/10!=0 -> 继续递归判断num/10==0?;
若num/10==0 -> 输出num%10(易错点!由于我选用putchar()函数对单个字符进行依次输出,直接putchar(num%10)得不到正确结果,详情见最后易错点总结!)
#include <stdio.h>
void transf(int num)
{
//递归调用
if(num/10!=0)
{
transf(num/10);
}
putchar(num%10+'0');
}
int main()
{
int num;
printf("%s","请输入一个整数:");
scanf("%d",&num);
printf("%s","转换为字符串的结果为:");
//若num为0,直接输出并返回
if(num==0)
{
putchar('0');
return 0;
}
//解决负号问题
if(num<0)
{
putchar('-');
num=-num;
}
//调用递归函数
transf(num);
return 0;
}
!!!易错点总结
//1.对于'-','0'等一类字符进行输出时必须用单引号('')!!!
//这是因为:单引号(')用于表示字符字面量。字符字面量是单个字符,
//可以是字母、数字、标点符号,也可以是一些转义字符,如\n表示换行、\t表示制表符等。
//2.直接putchar(num%10)得不到正确结果,这是因为->
//putchar()函数的参数是一个整数,表示要输出的字符的ASCII码值。
//如果你直接使用 putchar(num % 10),它会输出ASCII码值为 num % 10 的字符,而不是数字字符本身。
//数字字符 '0' 到 '9' 在ASCII码表中是连续的,它们分别对应的ASCII码值是 48 到 57。
//因此,为了正确输出数字字符,你需要将 num % 10 转换成对应的ASCII码值,即 num % 10 + '0'。
//你,记住了吗???