原题:
Problem Description |
e的一个简单数学公式是
其中允许n为无穷大。这实际上可以使用相对较小的n值得出非常精确的e近似值。
Output |
输出由上述公式生成的n值从0到9的e的近似值。输出的开头应与下面所示相似。
Sample Output |
n e
- -----------
0 1
1 2
2 2.5
3 2.666666667
4 2.708333333
(☆)注意:上述仅仅是部分输出,而题目要求是从0到9,审题应当准确!!!(在此竟然耽误了近二十分钟)
具体分析——首先,由于该代码不要求键盘输入,故不需要加入Scanner类进行输入,即不需要写import java.util.Scanner;其次,第一行和第二行只需要机械地输出即可,没有逻辑可言,运用"System.out.println(......);"即可;再者,当i=0时分母为零且当i<3与i>=3的小数点位数不尽相同,故应当分类讨论,在i<3时直接输出,而i>=3时用统一的算法逻辑书写;最后,应当注意小数点位数的大小应当在输出时定义好
解1(Presentation Error)——
public class oj1012 {
public static void main(String[] args){
double sum;
sum=2.5;
System.out.println("n"+" "+"e");
System.out.println("- -----------");
for(int i=0;i<=9;i++){
DecimalFormat df = new DecimalFormat("###.000000000");
if(i==0){
System.out.println("0"+" "+"1");
}
else if(i==1){
System.out.println("1"+" "+"2");
}
else if(i==2){
System.out.println("2"+" "+"2.5");
}
else {
int x=1;
for(int k=1;k<=i;k++){
x*=k;
}
sum=sum+1.0/x;//注意x是int类型,必须是“分子必须是1.0”
System.out.printf("%.9f\n",sum);
}
}
}
}
在i>=3时,在原基础(2.5)上继续增加1/i!的值,最终得出的结果就是新的值;再在新的值的基础上增加...需要注意的是,每当到新一轮的循环时,阶乘需要重新从1开始!
最终,使用%.9f来输出小数位数为9的结果.(太久没敲代码了,因为百分号忘记敲了)
解2(Accept)——
import java.text.DecimalFormat;
public class oj1012 {
public static void main(String[] args){
double sum;
sum=2.5;
System.out.println("n"+" "+"e");
System.out.println("- -----------");
for(int i=0;i<=9;i++){
DecimalFormat df = new DecimalFormat("###.000000000");
if(i==0){
System.out.println("0"+" "+"1");
}
else if(i==1){
System.out.println("1"+" "+"2");
}
else if(i==2){
System.out.println("2"+" "+"2.5");
}
else {
int x=1;
for(int k=1;k<=i;k++){
x*=k;
}
sum=sum+1.0/x;
System.out.println(i+ " " + df.format(sum));
}
}
}
}
在这种方法中,我们引入了DecimalFormat类,利用Format()方法进行格式化操作,设置小数点后的位数.
对于这种DecimalFormat类,我们使用的方法一般使用pattern格式来调用(☆☆☆☆☆):
0 :如果该位存在数字则输出该数字,如果不存在则输出0;
# :如果该位存在数字则默认位数,不存在不做任何输出;
. :小数分隔符;
- :负号;
,:分组分隔符;
E :科学计数法中分隔位数和指数;
% :放置在数字的前缀或后缀,将数字的数值乘以100,以百分数的形式输出;
' : 当上述特殊符号出现在数字中时,应为特殊符号添加单引号,系统会将该特殊符号当做普通符号处理;
import java.text.DecimalFormat;
...
...
DecimalFormat df = new DecimalFormat("###.000000000");//定义小数位数为9
...
...
System.out.println(...df.format(变量));
故代码会输出9位小数,结合前面的判断语句,符合题设条件,最终能通过OJ系统的检测.