题目:
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
话不多说上才艺!
现在的任务是注意数字的逐个输出,由于各项限制,我们只能输出逆序的数字
/*每个数字后面有一个空格*/ 如果在输出时强行printf("n ")加入空格,那么输出的最后一个数的末尾会有空格且不易消除。 所以要加一个判断条件 if
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
do{
int d = x%10;
printf("%d",d);
if(x>=10){
printf(" ");
}
x /=10;
}while (x>0);
printf("\n");
return 0;
}
现在,我们的输出是逆序的,那如何成为正序的呢?
先逆序后再逆序,输出不就正序了吗?
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int t=0;
do{
int d = x%10;
t = t*10 + d;
x /=10;
}while (x>0);
printf("x = %d,t=%d\n", x, t);
x=t;
do{
int d = x%10;
printf("%d",d);
if(x>=10){
printf(" ");
}
x /=10;
}while (x>0);
printf("\n");
return 0;
}
这样看似非常完美,但是当输入值为 :700 时,代码的输出值为 :7
所以,先逆序再逆序的方法只适合末尾没有 :0 的数字
我们举例:
x = 13425;
13425 / 10000 ->1
13425 % 10000 ->3425;
10000 / 10 ->1000
3425 % 1000 ->3
3425 % 1000 ->425
1000 /10 ->100
425 /100 ->4
425 % 100 ->25
100 / 10 ->10
25 / 10 ->2
25 % 10 ->5
10 / 10 ->1
5 / 1 ->5
5 % 1 ->5
1 / 10 ->0
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int mask = 1;
int t = x;
while (x>9){
x /=10;
mask *=10;
}
printf("x=%d,mask=%d\n",x,mask);
do{
int d = x/mask;
printf("%d",d);
if(mask>=10){
printf(" ");
}
x %=mask;
mask /=10;
}while(mask>0);
printf("\n");
return 0;
}
测试 : x=70000
啊,又是和PTA斗智斗勇的一天!