一、序列求和
问题描述:求1+2+3+...+n的值。这道题对有一点算法基础的人来说都很容易,就是数学规律的代码呈现。在数学中有自然数数列的求和可以通过:首项加尾项乘以项数除以2来得到。而这种思想完全可以通过代码进行实现。下面给出代码:
import java.util.Scanner;
public class 序列求和 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n;
n = sc.nextInt();
long total = 0;
total = ((1+n)*n)/2;
System.out.println(total);
}
}
n值为序列的最大值,因为n值得范围超出了int类型的范围所以采用long类型进行定义。然后模拟数学公式得出结果。
二、圆的面积
问题描述:给定圆的半径r,求圆的面积。与上一题的解决思想一样,将数学公式用代码进行呈现即可。下面给出代码:
import java.math.BigDecimal;
import java.util.Scanner;
public class 圆的面积 {
public static void main(String[] args) {
double PI = 3.14159265358979323;
int r;
Scanner sc = new Scanner(System.in);
r = sc.nextInt();
System.out.println(new BigDecimal(PI*r*r).setScale(7, BigDecimal.ROUND_HALF_UP));
}
}
由于题目要求的精度比较高,所以引用高精度类BigDecimal进行圆面积的计算,并且小数点后面采用四舍五入进行取值,有关这个类的使用请阅读我的另一篇博客"Java高精度数值运算方法,小数点后保留位置"进行学习。
三、Fibonacci数列
问题描述:Fibonacci数列的递推公式为:Fn = Fn-1 + Fn-2,其中F1 =F2 =1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。这题如果对递归理解的很熟悉的话,可以很明显的感觉到题目就在给出递归的相应条件,公式就是递归的部分,而F1 =F2 =1就是递归结束的标志。下面给出代码进行分析:
import java.util.Scanner;
public class Fibonacci数列 {
public static void main(String[] args)
{
int f[] = new int[1000000];
f[1]=f[2]=1;
for(int i = 3;i<1000000;i++ )
{
f[i]=(f[i-1]+f[i-2])%10007;
}
Scanner sc = new Scanner(System.in);
int n;
n = sc.nextInt();
System.out.println(f[n]);
}
}
和公式中给出的运算方式一样,而结束的条件就是当递归走到F1 = F2 =1时,程序开始回推,进行结果的运算。