20171221Java基础学习——复利编程题练习

[Q]
假设你月收入是3000,除开平时花销,每个月留下1000块钱进行投资。然后你认真的专研了 《股票和基金 21天从入门到精通》,达到了每年20%的投资回报率。
那么问题来了,以每个月投资1000块钱的节奏,持续投资多少年,总收入达到100万。(复利计算按照每年12000投入计算,不按照每月计息)
复利公式:F = p* ( (1+r)^n );F 最终收入,p 本金,r 年利率,n 存了多少年。
[A]

public class Millionaire {
    static int p = 12000;
    static float r = 0.20f;
    static int year = 0;
    static float num = 0.0f;
    public static void main(String[] args) {
        System.out.println("方法一:以年为节点计算");  
        Way_1();
        System.out.println("方法二:利用等比数列公式∑Sn");
        Way_2();
        System.out.println("方法三:按每笔投资累计计算 ");
        Way_3();
    }

    static void Way_1(){
        //  方法一←推荐做法    
        for(;num < 1000000;year++){
            num = (num + p) * (1 + r);/*以年为节点计算 ∑年复利 */
            System.out.println("year = "+year+", num = "+num);
            System.out.println("");
        }

    static void Way_2() {
        for(float m = 1.0f;num < 1000000.0;year++){
            num = p * (1 + r) * (1 - (1 + r) * m) / (-r);//运用了等比数列求[前n项の]和公式
            m = m * (1 + r);
        }
        System.out.println("year = "+year+", num = "+num);
        System.out.println();
    }

    static void Way_3(){    
        for(float m = 1.0f;num < 1000000;year++){
            num = num+ p * (1 + r) * m;/*按每笔投资累计计算 */
            m = m * (1 + r);
        }
        System.out.println("year = "+year+", num = "+num);
        System.out.println();
    }
}
/*
* 结论:
投资1年,获得收益= 14400.00057220459
投资2年,获得收益= 31679.99782562324
投资3年,获得收益= 52416.00139617934
投资4年,获得收益= 77299.20568084664
投资5年,获得收益= 107159.04395599371
投资6年,获得收益= 142990.86018585076
投资7年,获得收益= 185989.0396616792
投资8年,获得收益= 237586.8515994465
投资9年,获得收益= 299504.2396576747
投资10年,获得收益= 373805.1053275485
投资11年,获得收益= 462966.1441313971
投资12年,获得收益= 569959.3975624691
投资13年,获得收益= 698351.3016797554
投资14年,获得收益= 852421.614086314
投资15年,获得收益= 1037305.9615083694
持续投资15年,总收入达到100W
*/

总结

上述代码的区别在于计算方法不同,一种是按年计算[即方法一],另一种是按每笔投资计算[即,方法二、方法三]。

那么是否可以说不同的方法[或者说不同的解题思路]就是算法呢?

你可能感兴趣的:(java语法)