整数的分解与求最大最小组合!

    技术2022-05-20  32

    p { margin-bottom: 0.21cm; }a:link { }

    /*

    任意给出一个四位数,

    把它重新组成一个四位的最大数和一个最小数,

    算出两者间的差。

    例如: 3721 这个数,可以重组成: 7321 1237 ,相数之差为 7321 1237

    * numRefactor.c

    *

    * Created on: 2011-3-2

    @Author: banxi1988

    @email:banxi1988@gmail.com

    @qq:787928000

    *

    */

     

    #include <stdio.h>

    #include <stdlib.h>

    #include <math.h>

     

    #define BITS 4 /** 定义的多少位数? */

    #define JIN 10 /** 用于分解数据值的进制值。 */

     

    /***

    * 从标准输入得到输入数值

    */

    int getBitsNum (){

     

    int num = 0;

    int bound_bottom = pow (JIN,BITS-1) - 1;

    int bound_top = pow (JIN,BITS);

    printf ( " 请输入一个四位数 n ( ] < n < ]) : " ,bound_bottom,bound_top);

    scanf ( "%d" ,&num);

    if (num<bound_bottom || num > bound_top) return 0;

    else return num;

     

    }

    /** 打印数字数组用于测试观察! */

    void printBitArray ( int *bitArray){

    int i = 0;

    for (i = 0; i < BITS; i++){

    printf ( "=" ,*(bitArray+i));

    }

    putchar ( '/n' );

    }

    /***

    * 将数值按相应进制分解并将相应数字值保存到 bitArray 数组当中。

    */

    void toBitArray ( int num, int *bitArray){

     

    // int bitArray[BITS] = {0};

    int oringnal = num;

    int remainder = num;

    int order_m = 1; // 数量级 order of magnitude

    int index = 0;

    while (oringnal > order_m){

    bitArray[index++] = remainder % JIN;

    remainder = remainder/JIN;

    order_m *=JIN;

    }

    }

     

    /**

    * 采用冒泡法对传入进来的 bitArray 数组进行从小到大排序!

    * 注意其中变量 j 的取值。因为 j 后面可以取 j+1 ,所以 j 的边界为

    * BITS -1

    **/

    void sortBitArray ( int *bitArray){

     

    int i,j = 0;

    int temp;

    for (i = 0; i < BITS; i++){

    for (j = 0; j < (BITS -1); j++){

    if (bitArray[j+1] < bitArray[j]){

    temp = bitArray[j];

    bitArray[j] = bitArray[j+1];

    bitArray[j+1] = temp;

    }

    }

    }

    }

    /***

    * combination maximum value 组合成最大的整数值。

    * 即从大到小取数值。

    */

    int combMax ( int *bitArray){

     

    int i = 0;

    int order_m = 1;

    int sum = 0;

    for (i = 0; i < BITS; i++){

    sum += (*(bitArray+i))*order_m;

    order_m *=JIN;

    }

    return sum;

    }

    /***

    * combination minimum value 组合成最小的整数值。

    * 即从小到大取数值。

    */

    int combMin ( int *bitArray){

     

    int i = 0;

    int order_m = 1;

    int sum = 0;

    for (i = (BITS -1); i > -1; i--){

    sum += (*(bitArray+i))*order_m;

    order_m *=JIN;

    }

    return sum;

    }

     

    int main ( int argc, char **argv){

    int num = 0;

    int bitArray[BITS] = {0};

    int sum_max = 0;

    int sum_min = 0;

     

    while ((num = getBitsNum())== 0){;}

    toBitArray(num,bitArray);

    sortBitArray(bitArray);

    //printBitArray(bitArray);

    sum_max = combMax(bitArray);

    sum_min = combMin(bitArray);

    printf ( "] 这个数,可以重组成: ] ] ,相数之差为 ] ] = ]/n" ,

    num,sum_max,sum_min,sum_max,sum_min,(sum_max - sum_min));

     

    return EXIT_SUCCESS;

    }

     

    /***

    * 运行结果:

    banxi1988@banxi1988-desktop:~/jeework /match$ gcc -g -o numRefactor numRefactor.c

    banxi1988@banxi1988-desktop:~/jeework /match$ ./numRefactor 请输入一个四位数 n ( 999 < n < 10000) : 1234

    1234 这个数,可以重组成: 4321 1234 ,相数之差为 4321 1234 = 3087

    banxi1988@banxi1988-desktop:~/jeework /match$ ./numRefactor

    请输入一个四位数 n ( 999 < n < 10000) : 3721

    3721 这个数,可以重组成: 7321 1237 ,相数之差为 7321 1237 = 6084

    banxi1988@banxi1988-desktop:~/jeework /match$

     

    */

     


    最新回复(0)