程序要求如下:
1,求出数字是几位数
2,分别输出每一位数字
3,按逆顺序输出各位数字,如123输出321
思路:
借助求余和除法运算,将需要取出的数字变成个位,然后用求余的方式取出来;
当然一般而言你肯定不会想到这种方法,所以:
下面的方法二是这样做的,方法一用的是我们常见的思路就是将这个所求位数之前的数字全部都清空,具体实现方法如下:
方法一
#include <stdio.h>
#include <math.h>
int main()
{
int num, gewei, shiwei, baiwei, qianwei, wanwei, place;//定义为int型方便后面计算数位
printf("请输入一个数:");
scanf_s("%d", &num);
if (num > 9999)
place = 5;
else if (num > 999)
place = 4;
else if (num > 99)
place = 3;
else if (num > 9)
place = 2;
else
place = 1;
printf("place=%d\n", place);
wanwei = num / 10000;
qianwei = (num - 10000*wanwei) / 1000;
baiwei =( num-10000*wanwei-1000*qianwei) / 100;
shiwei = (num- 10000 * wanwei - 1000 * qianwei-100*baiwei) / 10;
gewei = (num - 10000 * wanwei - 1000 * qianwei - 100 * baiwei - 10 * shiwei);
switch (place)
{
case(5):
printf("%d%d%d%d%d\n",wanwei,qianwei,baiwei,shiwei,gewei);
printf("反序数字为:%d%d%d%d%d", gewei,shiwei,baiwei,qianwei,wanwei );
break;
case(4):
printf("%d%d%d%d\n", qianwei, baiwei, shiwei, gewei);
printf("反序数字为:%d%d%d%d", gewei, shiwei, baiwei, qianwei); break;
case(3):
printf("%d%d%d\n", baiwei, shiwei, gewei);
printf("反序数字为:%d%d%d", gewei, shiwei, baiwei); break;
case(2):
printf("%d%d\n", shiwei,gewei);
printf("反序数字为:%d%d", gewei, shiwei); break;
case(1):
printf("%d\n", gewei);
printf("反序数字为:%d", gewei); break;
}
return 0;
}
方法二
#include <stdio.h>
#include <math.h>
int main()
{
int num, gewei, shiwei, baiwei, qianwei, wanwei, place;//定义为int型方便后面计算数位
printf("请输入一个数:");
scanf_s("%d", &num);
if (num > 9999)
place = 5;
else if (num > 999)
place = 4;
else if (num > 99)
place = 3;
else if (num > 9)
place = 2;
else
place = 1;
printf("place=%d\n", place);
wanwei = num / 10000;
qianwei = (num / 1000) % 10;
baiwei = (num / 100) % 10;
shiwei = (num / 10)%10;
gewei = num % 10;
switch (place)
{
case(5):
printf("%d%d%d%d%d\n", wanwei, qianwei, baiwei, shiwei, gewei);
printf("反序数字为:%d%d%d%d%d", gewei, shiwei, baiwei, qianwei, wanwei);
break;
case(4):
printf("%d%d%d%d\n", qianwei, baiwei, shiwei, gewei);
printf("反序数字为:%d%d%d%d", gewei, shiwei, baiwei, qianwei); break;
case(3):
printf("%d%d%d\n", baiwei, shiwei, gewei);
printf("反序数字为:%d%d%d", gewei, shiwei, baiwei); break;
case(2):
printf("%d%d\n", shiwei, gewei);
printf("反序数字为:%d%d", gewei, shiwei); break;
case(1):
printf("%d\n", gewei);
printf("反序数字为:%d", gewei); break;
}
return 0;
}
比如:qianwei = (num / 1000) % 10;
原理就是用(number/1000)使千位变成个位,然后%10得到个位上的数字
(number%10=number ,0<=number<=9)
如果只是为了倒序输出而不需要知道具体的数位的数字,那么还有一种更简洁的方法:
#include <stdio.h>
int main() {
int n1,n2;
scanf("%d",&n2);
while(n2!=0) {//n2=0的时候结束循环
n1=n2%10;//求最小数位
n2=n2/10;//将十位变成个位
printf("%d",n1);
}
return 0;
}
//程序特点就是简单便捷
//相较于之前switch-case的程序,只是不能指定数位进行输出
操作系统:Windows10
软件:Devc++
编译器:TDM-GCC 4.9.2 64-bit Release