C语言任意给出一个四位数,把它重新组成一个四位的最大数和一个最小数,算出两者间

如题所述

#include<stdio.h>

int main()

{

     int n,a[4],i,j,temp,max,min;

     printf("请输入四位数:\n");

     scanf("%d",&n);

     for(i=0;i<4;i++)

      {

          a[i]=n%10;  //把n分割

          n=n/10;     //n缩短一位

      }

     for (i=0;i<4; i++)

     {

          for (j=1;j<4-i;j++) 

          {

               if (a[j]>a[j-1]) 

               {

                    temp=a[j-1];

                    a[j-1]=a[j];

                    a[j]=temp;

               }

          }

     }

     for(i=0;i<4;i++)

          printf("%d ",a[i]);

     printf("\n");

     max=a[0]*1000+a[1]*100+a[2]*10+a[3];

     min=a[3]*1000+a[2]*100+a[1]*10+a[0];

     printf("max=%d,min=%d\n",max,min);

     printf("max-min=%d\n",max-min);

     return 0;

}

运行结果如图:


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-26
#include <stdio.h>
#define ARR_LEN 4

int *sortNum(int,int[]);
int maxNum(int);
int minNum(int);

void main()
{
int num;
while(1)
{
printf("输入一个四位数:");
scanf("%d",&num);
if(num>1001 && num<10000)
{
break;
}
}

printf("最大值=%d\n最小值=%d\n两者相差%d\n",maxNum(num),minNum(num),maxNum(num)-minNum(num));
}

//最大值
int maxNum(int num)
{
int arr[ARR_LEN]={0};
sortNum(num,arr);
return (arr[0]*1000+arr[1]*100+arr[2]*10+arr[3]);
}

//最小值
int minNum(int num)
{
int arr[ARR_LEN]={0};
sortNum(num,arr);
if(arr[3]==0)
{
int temp=arr[2];
arr[2]=arr[3];
arr[3]=temp;
}

return (arr[3]*1000+arr[2]*100+arr[1]*10+arr[0]);
}

//从大到小排序
int *sortNum(int num,int arr[])
{
int index;
index=0;
while(num/10!=0)
{
arr[index]=num%10;
num/=10;
index++;
}
arr[index]=num;

int i,j;
for(i=0;i<ARR_LEN;i++)
{
for(j=0;j<ARR_LEN;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}

return arr;
}

第2个回答  2013-11-27
#include<stdio.h>
main(){
int i,j,t,a[4];
int m1,m2,dif;
printf("input a int, which has 4 digits\n");
for (i=0;i<4;i++) scanf("%1d",&a[i]); //输入时自动分解4位数字

for (i=0;i<3;i++){
for (j=i+1;j<4;j++)
if (a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} // 4位数字 排队
}
m1=a[3]*1000+a[2]*100+a[1]*10+a[0]; //组合大
m2=a[3]+a[2]*10+a[1]*100+a[0]*1000; //组合小
dif = m1-m2; //计算差别
printf("max=%d min=%d diff=%d\n",m1,m2,dif); //输出
return 0;
}本回答被网友采纳
第3个回答  2013-11-26
排序,一个顺序,一个逆序