正序分解整数C语言实现

我们都知道,逆序分解一个整数相当简单

#include<stdio.h>
int main()
{//逆序分解整数 并输出 
	int n=0;
	printf("请输入您要分解的整数:");
	scanf("%d",&n);
	int temp=n;
	while(temp!=0)
	{
		printf("%d",temp%10);
		if(temp>=10)//防止最后也输出一个空格 
		{
			printf(" ");
		 } 
		temp/=10;
	 } 
	return 0;
}
请输入您要分解的整数:34735375
5 7 3 5 3 7 4 3
--------------------------------
Process exited after 2.027 seconds with return value 0
请按任意键继续. . .

但是我们时常需要一个整数正序的各个数字,怎么办呢?
(1)非常正常的思路是,多花些空间,把数字挨个存在数组里,然后再逆序输出数组就得到原来那个整数的正序了,我们试试…

int main()//利用数组 
{//逆序分解整数 并正序输出 
	int n=0,i=0;
	int store[30]={0};
	int length=0 ;
	printf("请输入您要分解的整数:");
	scanf("%d",&n);
	int temp=n;
	while(temp!=0)
	{
		store[i]=temp%10;
		temp/=10;
		length++;
		i++;	
	 } 
	for(i=length-1;i>=0;i--)
	{
		printf("%d",store[i]);
		if(i>0)
		printf(" "); 
	} 
	return 0;
}
//输出结果:
请输入您要分解的整数:3246437
3 2 4 6 4 3 7
--------------------------------
Process exited after 3.151 seconds with return value 0
请按任意键继续. . .
(2)如果我不想使用数组呢?我就想非常直接地从头到尾正序输出一个整数

我们可以发现(int)134/100就得到1,以此类推,关键是那个100很难找到,我们又可以回想起求一个整数的位数的算法,求出位数就知道最高位应该除以多少了。步骤如下:
(1)得到n的位数,或者在求位数的过程中得到mask
(2)利用mask得到每一轮应该除以的数字,依次得到n从高到低的各个数字
(3)各种细节需要我们逐步去尝试纠正
代码如下:

}int main()
{//正序分解整数 并输出 
	int n=0,mask=1;//mask是除数 
	printf("请输入您要分解的整数:");
	scanf("%d",&n);
	int temp=n;
	while(temp>9)//当temp已经是个位数以后,mask就不可以再乘10了,因为一开始mask就有一位1 
	{
		temp/=10;
		mask*=10; 
	}
	temp=n;//不改变n的值是为了以后再用 
	do{
		printf("%d",temp/mask);
		if(mask>9)
		printf(" "); 
		temp%=mask; 
		mask/=10;		
	} while(mask!=0);//这个判断条件很精妙,如果你用 temp!=0就糟糕了,因为如果这个数字以0结尾,就会漏掉那些0 
	return 0;
}
//输出结果:
请输入您要分解的整数:32465532
3 2 4 6 5 5 3 2
--------------------------------
Process exited after 2.236 seconds with return value 0
请按任意键继续. . .

后续会有更多关于C语言以及java的学习内容,敬请关注…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值