#include<stdio.h>
int count=0;
void reserve(int n)//非递归
{
int i,f=1,count=0;
while(n!=0)
{
if(n%10==0&&f==1)//实现前面的0都不输出
{
n=n/10;
count++;
}
else {
f=0;
//遇到了非0的数字后,以后的0都要输出
i=n%10;//得到余数
n=n/10;//保存商
printf("%d",i);
}
}
printf("(有%d个0在最前面)",count);
}
int reserve1(int n)//递归
{
int i;
static int f=1;
if(n<10)
{
printf("%d",n);
}
else if(n%10==0&&f==1)
{
count++;
reserve1(n/10);//非尾递归
}
else
{
f=0;
i=n%10;
printf("%d",i);
return (reserve1(n/10));//是尾递归
}
}
void main()
{
int n;
printf("请输入一个整形数字n:");
scanf("%d",&n);
reserve(n);
printf("\n");
reserve1(n);
printf("(有%d个0在最前面)",count);
printf("\n");
}
有递归和非递归的