> 文档中心 > 每日一C:用不一样的脑回路理解:输入一个不多于五位数的正整数

每日一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");}

 以上两种解题方向对于萌新们应该是比较容易看懂的,如果不能理解欢迎私聊博主噢!!!

                       共同进步,加油!加油!!加油!!!