解题思路以及注意事项:

  每一个程序员都有自己独特的写法,针对同一问题的解法也是仁者见仁,智者见智,这道题就深刻地阐释了这个真理。

  好,下面大家看看小方的代码,小方会在代码之中给大家讲解小方的解题思路!

实例代码:

#include"stdio.h"
int main()
{
    int x,i,item=10000,number,size;//x用来存用户输入的数,i为控制循环常用的数,item为计算位数的数
    scanf("%d",&x);                //number为替代x的数,以保证x的完整,size为存位数的数,以便后面用
    for(i=5;i>0;i--,item/=10)
    {
        if(x/item)                 // 循环判断位数
        {
            printf("%d\n",i);
            size=i;
            break;
        }
    }
    for(i=0,item=1;i<size;i++)
    {
        item*=10;                   //得出像10000 1000 100 10这样的数,用到下面的循环中去
    }
    for(i=5,number=x;i>0 && number!=0;i--,item/=10)
    {
        if(number/item==0)continue; //保证小于五位的数分开输出前面不会有0
        if(i==1)
            printf("%d",number/item);//最后一位后面没有0
        else
            printf("%d ",number/item);//输出
        number%=item;
    }
    printf("\n");
    for(i=5,number=x;i>0&&number!=0;i--)//逆序输出,相比前面的简单很多,相信大家看的懂
    {
        printf("%d",number%10);
        number/=10;
    }
    return 0;
}

还有不懂的请在评论区留言,小方会为您解答


点赞(26)
 

0.0分

30 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 65 条评论

woody 4年前 回复TA
c = Num;
    for (i = size, x = 0; Num > 0; i--, x++)
    {
        a[x] = Num / b; //储存每一位数上面的数字
        Num = Num % b;
        if (x == size - 1) // 确保最后一个数字后面没有空格
        {
            printf("%d", a[x]);
        }
        else printf("%d ", a[x]);
        b /= 10;
    }
    printf("\n");
    //全部归位
    x = 0;
    i = size;
    Num = c;  
    for (b = 10; i > 0; i--, x++)
    {
        a[x] = Num % b; // 8123
        Num = Num / b;
        printf("%d", a[x]);
    }

    return 0;
}
woody 4年前 回复TA
#include <stdio.h>

int main(void)
{
    int Num = 0; //输入的数字
    int b = 10000; //判断位数
    int i = 0; //控制循环
    int size = 0; //储存循环次数
    int c = 0; //储存Num
    scanf_s("%d", &Num);
    //判断循环位数
    if (Num >= 100000)
    {
        printf("请输入一个五位数\n");
        scanf_s("%d", &Num);
    }
    for (i = 5; i > 0 && b != 0; b /= 10, i--)
    {
        if (Num / b)
        {
            printf("%d\n", i); //输出位数
            break;
        }
    }
    b = 1;
    size = i;
    //输出每一位数上面的数字

    int a[100] = { 0 };
    int x = 0;
    for (i = 1; i < size; i++)
    {
        b *= 10;
    }
    c =
进击的毛毛虫 4年前 回复TA
#include<stdio.h>
#include<math.h>
int main(void)
{
	int a, b=0, x=0,y=0,temp;
	scanf("%d", &a);
	temp = a;
	while (a > 0 && a < 99999)
	{
		b = a;
		while (b)//确定输入是几位数
		{
			b = b / 10;
			x++;		
		}
		printf("%d\n", x);
		b = pow(10, x - 1);//求出10的几位次方,求余使用
		while (a)//正序读出并且输出
		{		
			y = a / b;			
			a = a %b;
			b = b / 10;
			printf("%d ", y);
		}
		printf("\n");
		b = 0;
		x = 0;
		a = temp;
		while (a)//反向读出
		{
			b = a % 10;
			a = a / 10;			
			printf("%d", b);
		}
	}	
	return 0;
}
进击的毛毛虫 4年前 回复TA
#include<stdio.h>
#include<math.h>
int main(void)
{
	int a, b=0, x=0,y=0,temp;

	scanf_s("%d", &a);
	temp = a;
	while (a > 0 && a < 99999)
	{
		b = a;
		while (b > 0)//确定输入是几位数
		{
			b = b / 10;
			x++;		
		}
		printf("%d\n", x);

		b = pow(10, x - 1);//求出10的几位次方,求余使用
		while (a > 0)//正序读出并且输出
		{		
			y = a / b;
			
			a = a %b;
			b = b / 10;
			printf("%d ", y);
		}

		printf("\n");
		b = 0;
		x = 0;
		a = temp;
		while (a > 0)//反向读出
		{
			b = a % 10;
			a = a / 10;			
			printf("%d", b);
		}

	}



}
进击的毛毛虫 4年前 回复TA
#include<stdio.h>
#include<math.h>
int main(void)
{
	int a, b=0, x=0,y=0,temp;

	scanf_s("%d", &a);
	temp = a;
	while (a > 0 && a < 99999)
	{
		b = a;
		while (b > 0)
		{
			b = b / 10;
			x++;		
		}
		printf("%d\n", x);

		b = pow(10, x - 1);
		while (a > 0)
		{		
			y = a / b;
			
			a = a %b;
			b = b / 10;
			printf("%d ", y);
		}

		printf("\n");
		b = 0;
		x = 0;
		a = temp;
		while (a > 0)
		{
			b = a % 10;
			a = a / 10;			
			printf("%d", b);
		}

	}



}
uq_17089013375 4年前 回复TA
@酷酷流浪猫 这是我的也是错的~~~
uq_17089013375 4年前 回复TA
@酷酷流浪猫 #include<stdio.h> #include<string.h> int main() {     char c[5];     int a,b,s;     gets(c);     a=strlen(c);     printf("%d
",a);     for(int i=0;i<a;i++)     {         printf("%c ",c[i]);     }     printf("
");     for(int i=a-1;i>=0;i--)     {         printf("%c",c[i]);     }     return 0; }
刘软 5年前 回复TA
麻烦大家看一下到底错在哪了,系统说我有没想到的地方,难道是忽略了负数的情况吗
跪求了,谢谢
#include<stdio.h>
int main()
{
	int a,ret,b,c;
        scanf("%d",&a);
        int B=a,A=a; 
	
	for(ret=0;a!=0;){
		a/=10;
		ret++;
	} 
	printf("%d\n",ret);

        do{
    	       c=A%10;
    	       A/=10;
               printf("%d ",c);
        }while(A!=0);
    
        printf("\n");
    
	do{
    	b=B%10;
    	B/=10;
    	printf("%d",b);
	} while(B!=0);
    
    	return 0;}
小白 5年前 回复TA
楼主代码过不了 需要把 第二个for的 i=0 改成i=1
sy要努力努力呀 5年前 回复TA
@sy要努力努力呀 这是正确的,解决了输入为1000或10000的问题