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);
}
}