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

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

/*

任意给出一个四位数,

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

算出两者间的差。

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

* numRefactor.c

*

* Created on: 2011-3-2

*

*/

 

#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 ( %5d < n < %5d) : " ,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 ( "%3d" ,*(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 ( "%5d 这个数,可以重组成: %5d %5d ,相数之差为 %5d %5d = %5d/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$

 

*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值