输入一个数看看能不能整除11如果能输出这个数,如果不能把这个数重新排列一下要求重新排列的数能整除11且是最大数。例如:输入1120输出2101 #define MAX_IX 20 void Sort(unsigned char arry[], int lo, int up) { int i, j, k; unsigned char temp; for (i=up; i>lo; --i) { k = i; for (j=i-1; j>lo; --j) { if (arry[j] < arry[k]) k = j; } temp = arry[i]; arry[i] = arry[k]; arry[k] = temp; } } //下一个更小的数 void next(unsigned char arry[], int lo, int up) { int k=up; int temp; for (int j = up; j > lo; j--) { k = j; for (int i = j-1; i > lo; i--) { if (arry[i] > arry[k]) { temp = arry[k]; arry[k] = arry[i]; arry[i] = temp; Sort(arry, i, up); break; } } if (i!=lo) break; } } int GetNumber(unsigned char arry[], int lo, int up) { int k, num=0; for (k = lo+1; k<=up; k++) num = num*10 + arry[k]; return num; } void Divide11(int a) { int k; if (a%11 == 0) printf("%d/n", a); else { unsigned char arry[MAX_IX + 1]; int i = MAX_IX; //先分解成数组 while(a) { arry[i--] = a%10; a /= 10; } //排序 Sort(arry, i, MAX_IX); int min = 0; //能构成的最小的数 for (k=MAX_IX; k>i; k--) min = min*10 + arry[k]; printf("min = %d/n", min); int cur; //遍历 do { cur = GetNumber(arry, i, MAX_IX); if (cur % 11 == 0) { printf("=== %d ===/n", cur); break; } //printf("%d/n", cur); next(arry, i, MAX_IX); } while(cur > min); } }