Problem Description
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
Input
每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
Output
输出答案,保留2位小数。
Sample Input
1
2
3
4
0
Sample Output
1.00
3.00
5.67
8.83
http://blog.csdn.net/kavu1/article/details/50865564
import java.math.BigDecimal;
public class Matrix {
public static void main(String[] args) {
System.out.println("N: 1 和: "+getSum(1)+"");
System.out.println("N: 2 和: "+getSum(2)+"");
System.out.println("N: 3 和: "+getSum(3)+"");
System.out.println("N: 4 和: "+getSum(4)+"");
}
public static float getSum(int num){
float sum = (float)num;
//System.out.println("1:计算对角线的和 sum = "+num);
for(int i = 1;i < num; i++){
//System.out.println(i+1+":第"+i+"次循环加上所有1/"+(i+1)+"的和 sum = "+sum+" + "+"1/"+(i+1)+" * "+(num-i)+" * 2 ");
sum = sum + 1F/(i+1F)*(num-i)*2F;
}
//和保留2位小数
return getDecimals(sum,2);
}
public static float getDecimals(float num,int dig){
BigDecimal sum_b = new BigDecimal(num);
float result = sum_b.setScale(dig, BigDecimal.ROUND_HALF_UP).floatValue();
return result;
}
}