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

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

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

  • 34
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值