整数分解成一位一位数字,并输出

将整数分解成一位一位数字,原理是:

假设数字是a,则将a对10取余,得到个位数。

a/10得到个位数以外的其它数字,将结果赋值给div变量。然后将这个结果对10取余,得到十位数字。

将以上div赋值给a,a再除以10,得到百位和更高位的数字,将结果赋值给div变量,将div对10取余,得到百位。

......

每次执行除以10,将结果再对10取余,得到剩余的最低位数字。

当得到的div的值小于10时,得到最高位数字,直接输出,结束循环。

这样得到的数字是从低位到高位的数字,即逆序输出数字代码如下:

#include <stdio.h>
int main()
{	
	int a;	
	printf("请输入1个整数:");
	scanf("%d",&a);
	printf("\n");
	int a1 = a;
	int yu;   //存储中间变量余数
	int div;  //存储中间变量商
	int flage = 1;   //判断结束的标志,默认循环,值为1
	do{
		yu = a1 % 10;   //得到最右边的数字
		printf("%d",yu);
		div = a1 /10;   //得到除去最后面的一位数字之外的数字
		a1 = div;
		//如果剩下一位数字,直接输出,并结束循环
		if(a1 < 10){
			printf("%d",a1);
			flage = 0;   //flage为0,结束循环
		}
		
	}while(flage);

}

将以上代码简化一下:

#include <stdio.h>
int main()
{	
	int a;	
	printf("请输入1个整数:");
	scanf("%d",&a);
	printf("\n");
	int a1 = a;	
	do{
		int yu = a1 % 10;   //得到最右边的数字
		printf("%d",yu);
		a1 /= 10;   //得到除去最后面的一位数字之外的数字
		
	}while(a1 > 0);
}

如果希望数字的输出和输入顺序一样,只需输入数字以后,将数字倒序,倒序之后再倒序输出,即可用以上代码。只需在以上代码之前,添加将数字倒序即可。

#include <stdio.h>
int main()
{	
	int a;	
	printf("请输入1个整数:");
	scanf("%d",&a);
	printf("\n");
	int a1 = a;
	int d = 0;   //存储倒序之后的数字
	printf("倒序之后的数字:");
	//将a1的数字倒序
	do{
	int yu = a1 % 10;   //取出a1中最右边的数据
	printf("%d",yu);
	d = d*10 + yu;   //将d原来的数据左移1位,添加新得到的数字
	a1 /= 10;   //丢掉最右边的数字
	}while(a1 > 0);
	printf("\n");
	
	printf("顺序输出的数字是:");
	a1 = d; //将倒序后的数据赋值给a1
	//对a1再倒序输出,即得到顺序输出的数字		
	do{
	int	yu = a1 % 10;   //得到最右边的数字
		printf("%d",yu);
		a1 /= 10;   //得到除去最后面的一位数字之外的数字
		
	}while(a1 > 0);
}

 发现以上代码在数据末尾有0时,结果是错误的。原因是倒序输出是取一个数字输出一次,所以倒序每个数字都是原数据的倒序。当我们把倒序得到的数字组合成一个数据时,001自动转换成了1,对1倒序输出还是1。

这时我们需要判断个位数是否是0,如果是0的话倒序之后数字会变化去掉0。如果我们判断到个位是0,就给他加1.然后在最后倒序输出时,对最后一位再减去1即可。

#include <stdio.h>
int main()
{	
	int a;	
	printf("请输入1个整数:");
	scanf("%d",&a);
	printf("\n");
	int a1 = a;
	int d = 0;   //存储倒序之后的数字
	int flage = 1;   //用于判断个位数是否是0
	int flagege = 0;   //用于判断个位数是否加1
	//将a1的数字倒序
	do{
	int yu = a1 % 10;   //取出a1中最右边的数据
	//判断第一次的数据是否是0,是0就加1.
	if(flage){
		if(yu == 0){
			yu += 1;
			flagege = 1;		 	
		}
		flage = 0;     //保障只判断第一个余数,即个位数
	}

	d = d*10 + yu;   //将d原来的数据左移1位,添加新得到的数字
	a1 /= 10;   //丢掉最右边的数字
	}while(a1 > 0);
	printf("\n");
	
	printf("顺序输出的数字是:");
	a1 = d; //将倒序后的数据赋值给a1
	//对a1再倒序输出,即得到顺序输出的数字		
	do{
	int	yu = a1 % 10;   //得到最右边的数字
	if(a1 < 10){   //判断最后一位数字
		if(flagege){     //如果在前面倒序时加1,此时要减去
			yu--;
		}
	}
		printf("%d",yu);
		a1 /= 10;   //得到除去最后面的一位数字之外的数字
		
	}while(a1 > 0);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值