将整数分解成一位一位数字,原理是:
假设数字是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);
}