我们都知道,逆序分解一个整数相当简单
#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的学习内容,敬请关注…