algorithm++:一个整数称为是:【幸运数】,如果这个整数的各位数字的平方和为1或者反复计算各位数字的平方和为1 例如 19 是个幸运数

1):一个整数称为是:【幸运数】,如果这个整数的各位数字的平方和为1或者反复计算各位数字的平方和为1 例如 19 是个幸运数

 

coding:java程序实现

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class XingYunShu {

    List<Integer> list = new ArrayList<>();

    @Test
    public void demo() {
        long startTime = System.currentTimeMillis();
        // 100 以内的幸运数
        for (int i = 0; i < 100; i++) {
            boolean flag = isLuckyNumber(i);
            System.out.println("是否为幸运数:{" + i + "}=" + flag);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
    }

    // 判断是否为幸运数
    public boolean isLuckyNumber(Integer num) {
        List<Integer> integerList = splitNum(num);
        Integer count = 0;
        for (Integer l : integerList) {
            count += l * l;
        }
        if (count == 1) {
            return true;
        }
        if (list.contains(count)) {
            return false;
        }
        list.add(count);
        return isLuckyNumber(count);
    }
    // 把一个整数拆分为单个数值
    public List<Integer> splitNum(Integer num) {
        List<Integer> list = new ArrayList<Integer>();
        int length = (num + "").length();
        for (int i = length - 1; i >= 0; i--) {
            list.add(num % 10);
            num /= 10;
        }
        return list;
    }

}

 

将一个整数方式拆分的方式还有很多种,比如 number.toCharArray();  这里避免了类型之间的转换。

有人会问道 类型之间的转换很消耗资源吗?

java设计模式 的核心就是多态,各种流行的框架都有大量类型转换的操作。

再烂的编程语言也不在乎这点资源,更何况java和c#。

稍微复杂点的算法,几层循环一嵌套就顶你这来回转换几万次,计算机没那么水,怎么说也是高科技是不。

 

posted @ 2020-04-03 14:41  coding++  阅读(445)  评论(0编辑  收藏  举报