TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C语言趣味程序百例精解之java实现:

- public class Test83{
- public static void main(String args[]){
- new Test83(). KaBuLieKe83(4321,0);
- }
-
- /**
- * 83。卡布列克常数,挺好玩,实现一下
- */
- public void KaBuLieKe83(int n, int count) {
- int cha = getTheMaxOrMin(n, 1) - getTheMaxOrMin(n, 0);
- System.out.println(count + ":" + getTheMaxOrMin(n, 1) + "-"
- + getTheMaxOrMin(n, 0) + " = " + cha);
- count++;
- if (n == 6174) {
- System.out.println("I did it 6174");
- } else {
- KaBuLieKe83(cha, count);
- }
- }
-
- /**
- * 获取重新排列后最大的数,如2310,得到3210,暂时只要四位
- */
- public int getTheMaxOrMin(int n, int maxOrMin) {
- if (n < 1000 || n > 9999)
- return -1;
- int a = getThe(n, 4);
- int b = getThe(n, 3);
- int c = getThe(n, 2);
- int d = getThe(n, 1);
-
- int temp = 0;
- int[] list = new int[] { a, b, c, d };
- for (int i = 0; i < 4; i++) {
- for (int j = i; j < 4; j++) {
- if (maxOrMin == 1 ? (list[i] < list[j]) : (list[i] > list[j])) {
- temp = list[i];
- list[i] = list[j];
- list[j] = temp;
- }
- }
- }
- return list[0] * 1000 + list[1] * 100 + list[2] * 10 + list[3];
- }
- /**
- * 获取N右数第i位
- */
- public int getThe(int num, int i) {
- if (i > getBitCount(num) || i < 1)
- return -1;
- return (num % ((int) Math.pow(10, i))) / (int) Math.pow(10, i - 1);
- }
-
- /**
- * 获取一个数的位数
- */
- public int getBitCount(int n) {
- int i = 1;
- while (n / 10 > 0) {
- i++;
- n /= 10;
- }
- return i;
- }
- }
复制代码 C:at>java Test83
0:4321-1234 = 3087
1:8730-378 = 8352
2:8532-2358 = 6174
3:7641-1467 = 6174
I did it 6174
源码下载:http://file.javaxxz.com/2014/11/8/000509328.zip |
|