因为代码fun函数调用顺序是fun(30501)、fun(3050)、fun(305)、fun(30)、fun(3);fun(3)调用终止,执行输出语句先是fun(3),即输出3,然后是执行fun(30)的输出语句……刚好与调用顺序相反,如果想输出时1 5 3,把两个if语句顺序调换即可:
#include"stdioh"
void fun(int n)
{
if (n % 10) printf("%c\t", n % 10 + '0');
if (n / 10)
fun(n / 10);
}
main()
{
int n;
scanf("%d", &n);
fun(n);
}
//循环实现
#include<stdioh>
int main()
{
int n, t = 0;
scanf("%d", &n);
if(n<=0)return 0;
else
while(n){
t = t 10 + n % 10;
n /= 10;
}
printf("%d", t);
return 0;
}
简单修改一下就可以变递归了。代码如下
#include<stdioh>int fanzhuan(int n,int t){
t = t 10 + n % 10;
n /= 10;
if(n>0)return fanzhuan(n,t);
return t;
}
int main()
{
int n, t = 0;
scanf("%d", &n);
if(n<=0)return 0;
else t=fanzhuan(n,t);
printf("%d", t);
return 0;
}
//方法一,不需将转换后的字符存储在字符数组中
#include<stdioh>
void change(int );
int main()
{
int n;
scanf("%d",&n);
change(n);
printf("\n");
return 0;
}
void change(int num)
{
if(num==0)return ;
change(num/10);
printf("%d",num%10);
}
//方法二,先将转换后的字符存储在字符数组中
#include<stdioh>
#define LEN 100
int m=0;
void change(int ,char );
int main()
{
int n,i;
char a[LEN];
for(i=0;i<LEN;i++)
a[i]='\0';
scanf("%d",&n);
change(n,a);
printf("%s",a);
printf("\n");
return 0;
}
void change(int num,char s)
{
if(num==0)return ;
change(num/10,s);
s[m++]=(char)(num%10+'0');
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)