import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
public class Test01 {
public static void main(String[] args) {
try {
int precision, i;
BufferedReader str = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("输入整数:");
precision = Integer.parseInt(str.readLine());
str.close();
System.out.println("the e is :" + getE(precision+1).setScale(precision, BigDecimal.ROUND_FLOOR).toPlainString());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* exp(1) = 1 + 1/1! + 1/2! + ... + 1/n!
* @param precision
* @return
*/
public static BigDecimal getE(int precision) {
BigDecimal one = BigDecimal.ONE;
BigDecimal value = BigDecimal.ONE;
BigDecimal n = BigDecimal.ONE;
BigDecimal factorial = BigDecimal.ONE;
BigDecimal lastValue = BigDecimal.ZERO;
while (true){
value = value.add(one.divide(factorial, precision, BigDecimal.ROUND_HALF_UP));
if (value.compareTo(lastValue) == 0) {
break;
} else if (value.compareTo(lastValue) < 0) {
System.out.println("???");
break;
}
n = n.add(one);
factorial = factorial.multiply(n);
lastValue = value;
}
return value;
}
}