p { margin-bottom: 0.21cm; }a:link { }
/*
任意给出一个四位数,
把它重新组成一个四位的最大数和一个最小数,
算出两者间的差。
例如: 3721 这个数,可以重组成: 7321 和 1237 ,相数之差为 7321 - 1237
* numRefactor.c
*
* Created on: 2011-3-2
@Author: banxi1988
@email:[email protected]
@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 ( %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$
*/