为什么输入400输出4当输入655时没有输出这是为什么,应该怎么修改

img


#include<stdio.h>
#include<math.h>
int main()
{
int x,a,b,c;
while(scanf("%d",&x) != EOF)
{
a=x/100;
b=x/10%10;
c=x%10;

  if
  (b==0&&a>c)
  {
  printf("%d%d%d\n",c,b,a);    
  }
  else if
  (b==0&&a<c)
  {
  printf("%d%d%d\n",a,b,c);    
  }
  else if
  (c==0&&a>b)
  {
   printf("%d%d%d\n",b,c,a);
  }
  else if
  (c==0&&a<b)
  {
   printf("%d%d%d\n",a,c,b);
  }
  else if
  (b==0&&c==0)
  {
   printf("%d%d%d\n",a,b,c);
  }
  else if
  (a>b&&a>c&&b>c&&b!=0&&c!=0)
  {
      printf("%d%d%d\n",c,b,a);    
  }
  else if
  (a>b&&a>c&&b<c&&b!=0&&c!=0)
  {
     printf("%d%d%d\n",b,c,a);
  }
  else if
  (b>a&&b>c&&a>c&&b!=0&&c!=0)
  {
      printf("%d%d%d\n",c,a,b);
  }
  else if
  (b>a&&b>c&&c>a&&b!=0&&c!=0)
  {
      printf("%d%d%d\n",a,c,b);
  }
  else if
  (c>a&&c>b&&a>b&&b!=0&&c!=0)
  {
      printf("%d%d%d\n",b,a,c);
  }
  else if
  (c>a&&c>b&&b>a&&b!=0&&c!=0)
  {
      printf("%d%d%d\n",a,b,c);
  }
     
    
}
  return 0;

}

题主考虑的太复杂了,试试这样写,供参考:

#include<stdio.h>
#define swap(x,y) {x = x + y; y = x - y; x = x - y;}
int f(int n)
{
    int n1,n2,n3;
    if(n%100 == 0) return n;
    n1=n%10;
    n2=n/10%10;
    n3=n/100;
    if(n2>n1)
      swap(n1,n2);
    if(n3>n1)
      swap(n1,n3);
    if(n3>n2)
      swap(n2,n3);
    if(n3==0)
      swap(n2,n3);
    return n3*100+n2*10+n1;
}

int main()
{
    int n,n1;
    while(scanf("%d",&n)==1 && n != -1)// -1 结束输入
    {
        n1 = f(n);
        printf("%d\n",n1);
    }
    return 0;
}


//任意输入一个三位整数,再把它的次序打乱重新组合一个新的三位整数,使其值最小。
#include <stdio.h>
#define N   3
void main()
{
    int arr[N],i,j,tmp;
    printf("输入三位整数:");
    while(1)
    {
        for(i=0;i<N;i++)
        {
            scanf("%1d",&arr[i]);
        }
        //冒泡排序。从小排到大
        for(i=0;i<N-1;i++)
        {
            for(j=0;j<N-1-i;j++)
            {
                if(arr[j]>arr[j+1])
                {
                    tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }

        if(arr[0]==0&&arr[1]==0)
        {
            printf("%d%d%d",arr[2],arr[1],arr[0]);
        }
        else if(arr[0]==0&&arr[1]!=0)
        {
            printf("%d%d%d",arr[1],arr[0],arr[2]);
        }
        else
        {
            printf("%d%d%d",arr[0],arr[1],arr[2]);
        }
        printf("\n");
    }
}

分离出三个数据,升序排列,如果第一位为零,与最近的非零数交换。