7-37 输出整数各位数字 解题详细过程

 题目:

本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。

输入格式:

输入在一行中给出一个长整型范围内的非负整数。

输出格式:

从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

输入样例:

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斗智斗勇的一天!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值