1009 - 哈哈哈

1009 - 哈哈哈

时间限制:1秒
内存限制:128兆

题目描述
给出一个不多于5位的整数,要求

1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123

输入
一个不大于5位的数字

输出
三行

第一行 位数
第二行 用空格分开的每个数字,注意最后一个数字后没有空格
第三行 按逆序输出这个数

样例输入

12345

样例输出

5
1 2 3 4 5
54321

对于本题,我自己刚开始想的方法十分暴力,用了五层for循环进行了嵌套,
每一层for循环代表一位数,再用if判断首位到哪里不是0,这是几位数,思路
简单,但是代码十分暴力

//方案一,暴力求解 
#include<stdio.h>

int main()

{
 	
 	int a, b, c, d, e, x;
 	
 	scanf("%d",&x);
 	
 	for(a=0;a<10;a++)
 	
 	{
  	
  		for(b=0;b<10;b++)
  	
  		{
   		
   			for(c=0;c<10;c++)
   		
   			{
    			
    				for(d=0;d<10;d++)
    			
    				{
     			
     					for(e=0;e<10;e++)
     				
     					{
      					
      						if(a*10000+b*1000+c*100+d*10+e==x)
      					
      						{
       							if(a==0&&b==0&&c==0&&d==0)
       						
       							{
        						
        							printf("1\n");
        						
        							printf("%d\n",e);
        						
        							printf("%d",e);
       							
       							}
       					
       							if(a==0&&b==0&&c==0&&d!=0)
       						
       							{
        						
        							printf("2\n");
        						
        							printf("%d %d\n",d,e);
        						
        							printf("%d%d",e,d);
       							}
        					
        						if(a==0&&b==0&&c!=0)
       					
       							{
        						
        							printf("3\n");
        						
        							printf("%d %d %d\n",c,d,e);
        						
        							printf("%d%d%d",e,d,c);
       						
       							}
        					
        						if(a==0&&b!=0)
       						
       							{
        						
        							printf("4\n");
        						
        							printf("%d %d %d %d\n",b,c,d,e);
        						
        							printf("%d%d%d%d",e,d,c,b);
       							
       							}
        					
        						if(a!=0)
       						
       							{
        						
        							printf("5\n");
        						
        							printf("%d %d %d %d %d\n",a,b,c,d,e);
        						
        							printf("%d%d%d%d%d",e,d,c,b,a);
       							}
      						}
     					}
    				}
  			 }
  		}
	}
 
 	return 0;
}

后来我对本题进行了再一次的思考,觉得不应该只能暴力求解,那样过于麻烦,
想了想能不能进行对每一位数字的储存并进行位数计算,结果发现是可行的

//方案二, 先定义一个数组对数字的每一位进行存值,再进行对应的输出 
#include<stdio.h>

int main()

{
 	
 	int n, a[10], i=0;
 	
 	scanf("%d",&n);
 	
 	while(n!=0)
 	
 	{
  	
  		a[i]=n%10;             //存入个位数字的值 
  		
  		n=n/10;                //舍弃个位数字 
  		
  		i++;                   //将数组的存储位置后移并且对数字进行位数计算 
 	
 	}
 	
 	printf("%d\n",i);          //计算出来的数字位数 
 	
 	for(int j=i-1;j>=0;j--)    //由于每一位的数字是倒序存入,所以这里要进行倒序输出 
 	
 	printf("%d ",a[j]);        
 	
 	printf("\n");
 	
 	for(int j=0;j<i;j++)       //同理输出 
 	
 	printf("%d",a[j]);
 	
 	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/w__000000wbt/article/details/83539972