题:输入一个不多于五位数的正整数,要求:(1) 求出它是几位数: (2) 分别输出每一位数字; (3) 输出逆序数,如输入的数为123,输出为321;
关于此类题的两类解题方向
对于这类题,只要能有效的表示出个位十位百位千位乃至万位的值,这类题就是送分题!今天给朋友们介绍的两类解题方向相对来说对萌新们较友好,萌新们理解起来应该比较容易!!!
数位的有效表示
在敲代码之前,我们先来简单叙述一怎么有效的表示数位,这样更有利于新同学们对代码的理解. 假设一个五位数为x,它的万位 千位 百位 十位 个位 分别用 a,b,c,d,e来表示;那我们现在来用不同的方法表示不同数位:
第一种:a=n/10000; b=n%10000/1000; c=n%1000/100; d=n%100/10; e=n%10;(这种表达方式应该是最简单的了,如果看不懂那就是对取余的理解还不到位)
第二种:a=n/10000; b=(n-a*10000)/1000; c=(n-b*1000)/100; d=(n-c*100)/10; e=n%10; (这种表达方式应该也好理解,如果不好理解可以代一个五位数进去试一试,应该很快能理解)
第三种: a=n/10000; b=n/1000; c=n/100; d=n/10; e=n%10; 但是这种表示不方便的地方就是待会printf里a,b,c,d,e所对应的就分别是a, b-a*10, c-b*10, d-c*10, e (而且不难发现,这种表达方式就是第二种表达方式的分配律)
第一类方向:if else语句表示
#include <stdio.h>
#include<Windows.h>
void main()
{
int a,b,c,d,e,x;
printf("请输入一个不多于五位数的正整数:");
scanf("%d",&x);
while(x<0||x>99999)
{
printf("input error\n");
}
a=x/10000;
b=x%10000/1000;
c=x%1000/100;
d=x%100/10;
e=x%10;
if(0<a&&a<=9)
{
printf("x是五位数\n",x);
printf("%d%d%d%d%d\n",a,b,c,d,e);
printf("%d%d%d%d%d\n",e,d,c,b,a);
}
else if(0<b&&b<=9)
{
printf("x是四位数\n",x);
printf("%d%d%d%d\n",b,c,d,e);
printf("%d%d%d%d\n",e,d,c,b);
}
else if(0<c&&c<=9)
{
printf("x是三位数\n",x);
printf("%d%d%d\n",c,d,e);
printf("%d%d%d\n",e,d,c);
}
else if(0<d&&d<=9)
{
printf("x是两位数\n",x);
printf("%d%d\n",d,e);
printf("%d%d\n",e,d);
}
else
printf("x是一位数\n",x);
system("pause");
}
第二类:switch语句表示
#include<stdio.h>
#include<Windows.h>
void main()
{
int x;
int a,b,c,d,e;
int p;
printf("请输入一个不大于五位数的正整数:");
scanf("%d",&x);
if(x>9999&&x<=99999)
p=5;
else if(x>999&&x<=9999)
p=4;
else if(x>99&&x<=999)
p=3;
else if(x>9&&x<=99)
p=2;
else p=1;
printf("这是一个%d位整数\n",p);
a=x/10000;
b=(x-a*10000)/1000;
c=(x-a*10000-b*1000)/100;
d=(x-a*10000-b*1000-c*100)/10;
e=x%10;
switch(p)
{
case 5:
printf("每位数是%d%d%d%d%d\n",a,b,c,d,e);
printf("反序数是%d%d%d%d%d\n",e,d,c,b,a);break;
case 4:
printf("每位数是%d%d%d%d\n",b,c,d,e);
printf("反序数是%d%d%d%d\n",e,d,c,b);break;
case 3:
printf("每位数是%d%d%d\n",c,d,e);
printf("反序数是%d%d%d\n",e,d,c);break;
case 2:
printf("每位数是%d%d\n",d,e);
printf("反序数是%d%d\n",e,d);break;
case 1:
printf("每位数是%d\n",e);
printf("反序数是%d\n",e);break;
default:printf("input error\n");break;
}
system("pause");
}
以上两种解题方向对于萌新们应该是比较容易看懂的,如果不能理解欢迎私聊博主噢!!!
共同进步,加油!加油!!加油!!!