每日一C:用不一样的脑回路理解:输入一个不多于五位数的正整数
题:输入一个不多于五位数的正整数,要求:(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 #includevoid main(){int a,b,c,d,e,x;printf("请输入一个不多于五位数的正整数:");scanf("%d",&x);while(x99999){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);}elseprintf("x是一位数\n",x);system("pause");}
第二类:switch语句表示
#include#includevoid main(){int x; int a,b,c,d,e;int p; printf("请输入一个不大于五位数的正整数:"); scanf("%d",&x); if(x>9999&&x999&&x99&&x9&&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");}
以上两种解题方向对于萌新们应该是比较容易看懂的,如果不能理解欢迎私聊博主噢!!!
共同进步,加油!加油!!加油!!!