c语言问题,谁能看懂这个代码啊,帮我解释下。
题目是这样的:“给出一个不多于5位的整数,要求1、求出它是几位数2、分别输出每一位数字3、按逆序输出各位数字,例如原数为321,应输出123。例如input:12345;...
题目是这样的:“给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123。例如input:12345;output:
5
1 2 3 4 5
54321“
这个代码是其中的一种解法,谁能帮忙看看?
#include<stdio.h>
int main()
{
int x,x1,i,w,y,b=1,f=1;
scanf("%d",&x);
x1=x;
for(i=0;x1!=0;x1/=10,b*=10,i++);
b/=10;
printf("%d\n",i);
x1=x;
while(f!=2)
{
y=x1/b%10;
printf("%d",y);
if(y!=x1%10||b!=1)
printf(" ");
else
{
printf("\n");
f=2;
}
b/=10;
x1=x;
}
for(i=0;x1!=0;i++)
{
w=x1%10;
printf("%d",w);
x1/=10;
}
printf("\n");
return 0;
} 展开
5
1 2 3 4 5
54321“
这个代码是其中的一种解法,谁能帮忙看看?
#include<stdio.h>
int main()
{
int x,x1,i,w,y,b=1,f=1;
scanf("%d",&x);
x1=x;
for(i=0;x1!=0;x1/=10,b*=10,i++);
b/=10;
printf("%d\n",i);
x1=x;
while(f!=2)
{
y=x1/b%10;
printf("%d",y);
if(y!=x1%10||b!=1)
printf(" ");
else
{
printf("\n");
f=2;
}
b/=10;
x1=x;
}
for(i=0;x1!=0;i++)
{
w=x1%10;
printf("%d",w);
x1/=10;
}
printf("\n");
return 0;
} 展开
1个回答
展开全部
for(i=0;x1!=0;x1/=10,b*=10,i++);这一句话,将你输入的数字X1先去掉最后一位,并且i表示位数,自增1,并且到下一个while循环的时候b是10的i-1次幂,为之后的逆序输出做准备。
第二个循环,也就是
while(f!=2)
{
y=x1/b%10;
printf("%d",y);
if(y!=x1%10||b!=1)
printf(" ");
else
{
printf("\n");
f=2;
}
b/=10;
x1=x;
}
中,y=x1/b%10;这句话在循环中y分别等于x1第一位和第二直到最后一位的值,而这个循环里if(y!=x1%10||b!=1)是判断是否输出结束,没有的话就补空格,结束就补回车,完成顺序输出。
最后一个循环
for(i=0;x1!=0;i++)
{
w=x1%10;
printf("%d",w);
x1/=10;
}
printf("\n");
return 0;
}
就是每次x1对10取余,得到最末的数字,之后x1再除10将最后一位去掉重复取余步骤完成逆序的输出。
第二个循环,也就是
while(f!=2)
{
y=x1/b%10;
printf("%d",y);
if(y!=x1%10||b!=1)
printf(" ");
else
{
printf("\n");
f=2;
}
b/=10;
x1=x;
}
中,y=x1/b%10;这句话在循环中y分别等于x1第一位和第二直到最后一位的值,而这个循环里if(y!=x1%10||b!=1)是判断是否输出结束,没有的话就补空格,结束就补回车,完成顺序输出。
最后一个循环
for(i=0;x1!=0;i++)
{
w=x1%10;
printf("%d",w);
x1/=10;
}
printf("\n");
return 0;
}
就是每次x1对10取余,得到最末的数字,之后x1再除10将最后一位去掉重复取余步骤完成逆序的输出。
追问
那个b的用处是什么?不太明白。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询