*1019. 数字黑洞

  1 /*
  2  * Main.c
  3  * 1019. 数字黑洞
  4  *  Created on: 2014年8月31日
  5  *      Author: Boomkeeper
  6  *******部分通过******
  7  */
  8 
  9 #include <stdio.h>
 10 #include <stdlib.h>
 11 
 12 /*
 13  *排序整数的各个位数字
 14  *src[4]:原数组
 15  *dstDown[4]:降序排序结果
 16  *dstUp[4]:升序排序结果
 17  */
 18 void sort(int dstUp[4],int dstDown[4],int src[4]){
 19 
 20     int i,j;
 21     int temp;
 22     //赋值
 23     for(i=0;i<4;i++){
 24         dstUp[i]=src[i];
 25         dstDown[i]=src[i];
 26     }
 27     //排序,up
 28     for(i=0;i<4;i++){
 29         for(j=0;j<4-i-1;j++){
 30             if(dstUp[j]>dstUp[j+1]){
 31                 temp=dstUp[j];
 32                 dstUp[j]=dstUp[j+1];
 33                 dstUp[j+1]=temp;
 34             }
 35         }
 36     }
 37     //排序,down
 38     for(i=0;i<4;i++){
 39         for(j=0;j<4-i-1;j++){
 40             if(dstDown[j]<dstDown[j+1]){
 41                 temp=dstDown[j];
 42                 dstDown[j]=dstDown[j+1];
 43                 dstDown[j+1]=temp;
 44             }
 45         }
 46     }
 47 }
 48 
 49 /*
 50  * 拆分整数的各位数字,以进行排序
 51  * 个位:num[3]
 52  * 十位:num[2]
 53  * 百位:num[1]
 54  * 千位:num[0]
 55  */
 56 void split(int n,int num[4]){
 57 
 58     num[3]=n%10;
 59     n/=10;
 60     num[2]=n%10;
 61     n/=10;
 62     num[1]=n%10;
 63     n/=10;
 64     num[0]=n;
 65 }
 66 
 67 /*
 68  * 获得排序后的新的4位整数,做差,并返回结果s
 69  */
 70 int Kaprebar(int temp){
 71 
 72     int num1[4]={0},num2[4]={0},num3[4];//分别存储被减数、减数、差的各位数字
 73     int num_1,num_2;//被减数、减数
 74 
 75     split(temp,num3);
 76     sort(num2,num1,num3);
 77 
 78     //做差
 79     num_1=num1[0]*1000+num1[1]*100+num1[2]*10+num1[3];
 80     num_2=num2[0]*1000+num2[1]*100+num2[2]*10+num2[3];
 81     temp=num_1-num_2;
 82     if(temp==0){
 83         printf("%04d - %04d = %04d\n",num_1,num_2,temp);
 84         exit(0);
 85     } else{
 86         printf("%04d - %04d = %04d\n",num_1,num_2,temp);
 87     }
 88     //返回差
 89     return temp;
 90 }
 91 
 92 int main(void) {
 93 
 94     int n; //题目中的N
 95 
 96     scanf("%4d", &n);
 97     int temp = n;
 98 
 99     while (temp != 6174) {
100         temp = Kaprebar(temp);
101     }
102 
103     return 0;
104 }

 

 

题目链接:

http://pat.zju.edu.cn/contests/pat-b-practise/1019

 

 

.

posted @ 2014-09-01 20:50  Boomkeeper  Views(359)  Comments(0Edit  收藏  举报
最好的流量统计 网站流量计数器