当前位置: 首页 > 工具软件 > nnn > 使用案例 >

计算n个n连续相加(n+nn+nnn+nnn...)

白翰海
2023-12-01
package com.bjsxt.test;


import org.junit.Test;

public class getSum
{


   

    public static void main(String[] args)
    {
        System.out.println(3 + 33 + 333 + 3333 + 33333 + 333333);
        System.out.println(getSum(3, 6));
        System.out.println(2 + 22 + 222 + 2222 + 22222);
        System.out.println(getSum(2, 5));
        System.out.println(4 + 44 + 444 + 4444 + 44444 + 444444 + 4444444);
        System.out.println(getSum(4, 7));
    }

    /**
     * 获取n个相同数的和
     * 思路:例如2+22+222+2222
     * 可以分解为:2+(20+2)+(200+20+2)+(2000+200+20+2)
     * 仔细琢磨发现,式子又可以分解为:2一共有4个,20一共有3个,200一共有2个,2000有1个
     * 4*2
     * 3*20
     * 2*200
     * 1*2000
     * 规律来了: 前面那个(4,3,2,1)是要加的个数,后面(2,20,200,2000)是那个数的10的"(0,1,2,3)次方
     * 说到这里可能还不明白该怎么下手,但是你发现(4,3,2,1)和(0,1,2,3)有关系
     * 4+0=4  3+1=4 ....
     * 到了这里还不明白建议直接按照我的逻辑写代码,还不行的话我也帮不了
     * @param num 需要相加的数
     * @param count 需要加的次数
     * @return 结果
        
     */

    public static int getSum(int num, int count)
    {
        int sum = 0;
        for (int i = 1; i <= count; i++)
        {
            //例如num=2,count=3
            //1*2*10^2 + 2*2*10^1 +3*2*10^0 
            //Math.pow(10,3)这是一个计算n的几次方的数学函数,这题就是10的3次方,你想要6的5次方就是Math.pow(6,5)
            sum += i * num * (int) Math.pow(10, count - i);
        }
        return sum;
    }






 /**
     * 计算n个连续相同的n数相加,这个比较相对上面的这个更次
     *  
     *
     * @param n                给定的数
     * @param count            给定相同数要相加的次数
     */
    public static void getNumSum(int n, int count)
    {
        double temp = n;
        double num = temp;
        double sum = 0;
        for (int i = 1; i <= count; i++)
        {
            double power = Math.pow(10, i);
            temp = num % power;
            num = temp * 10;
            sum += temp;
        }
        System.out.println((int) sum);


    }
}

 

 类似资料: