希望用C语言解答,最好简单一点,因为是初学者题目描述
程序每次读入一个正整数N(N的位数小于10位),然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入70000,输出应该是7。
输入
多组数据,每次输入是一个正整数,当输入为0时结束
输出
对于每个输入的正整数,输出对应的逆序数
#include<stdio.h>
#include<strings.h>
//反置函数,将数据反置,不包括开头的0,存入静态数组
void reverse(int data)
{
static size_t flag=0; //一个标识,记录递归调用的次数,控制后面代码的运行次数
flag++;
static char buf[100]={0}; //反向数据的存储数组
int n=data/10; //商
int m=data%10; //余数
static int i=0; //buf的下标
if(!(m==0&&buf[0]==0&&i==0)) //只有满足条件才会给数组赋值
buf[i++]=m;
if(n>0) //商不为0,递归
reverse(n);
else
return;
if(--flag==1) //判断是不是最外层递归
{
flag=0;
for(int j=0;j<i;j++) //输出数组
printf("%d",buf[j]);
printf("\n");
i=0; //这两个是静态变量,所以需要重新置位,之所以不用全局变量,是因为全局变量不安全,尽量少用
bzero(buf,100);
}
return;
}
int main()
{
int data;
while(1)
{
printf("输入数据:");
scanf("%d",&data);
while(getchar()!='\n');
if(data!=0)
reverse(data);
else
break;
}
}
#include<strings.h>
//反置函数,将数据反置,不包括开头的0,存入静态数组
void reverse(int data)
{
static size_t flag=0; //一个标识,记录递归调用的次数,控制后面代码的运行次数
flag++;
static char buf[100]={0}; //反向数据的存储数组
int n=data/10; //商
int m=data%10; //余数
static int i=0; //buf的下标
if(!(m==0&&buf[0]==0&&i==0)) //只有满足条件才会给数组赋值
buf[i++]=m;
if(n>0) //商不为0,递归
reverse(n);
else
return;
if(--flag==1) //判断是不是最外层递归
{
flag=0;
for(int j=0;j<i;j++) //输出数组
printf("%d",buf[j]);
printf("\n");
i=0; //这两个是静态变量,所以需要重新置位,之所以不用全局变量,是因为全局变量不安全,尽量少用
bzero(buf,100);
}
return;
}
int main()
{
int data;
while(1)
{
printf("输入数据:");
scanf("%d",&data);
while(getchar()!='\n');
if(data!=0)
reverse(data);
else
break;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2017-11-12
用二个循环就可以的。