import java.util.Scanner;
public class Lagrange_polynomial {
static int num;//记录y&x的对数
final static int MAXN=10;
static double a[][]=new double[MAXN][2];//记录x和y
static double x;//记录要求近似值的x
static double y=0;//用于保存近似值
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("共有几对x和f(x):");
num=sc.nextInt();
System.out.println("依次输入x&f(x):");
for(int i=0;i<num;i++){
a[i][0]=sc.nextDouble();
a[i][1]=sc.nextDouble();
}
System.out.println("所求值的x:");
x=sc.nextDouble();
System.out.print("L(x)=");
for(int i=0;i<num;i++){//用于输出L(x)
print(i);
if(i!=(num-1)){
System.out.print("+");
}
}
for(int i=0;i<num;i++){
deal(i);
}
System.out.println("f("+x+")的近似值是:"+y);
}
static void print(int ii){//用于输出L(x)
System.out.print(a[ii][1]+"*");
System.out.print("(");
for(int i=0;i<num;i++){
if(i!=ii){
if(i!=0&&ii!=0){
System.out.print("*");
}
System.out.print("(");
System.out.print("x-"+a[i][0]);
System.out.print(")");
if(i!=0){
System.out.print("/");
}
System.out.print("(");
System.out.print(a[ii][0]+"-"+a[i][0]);
System.out.print(")");
}
}
System.out.println(")");
}
static void deal(int ii){//用于计算近似值
double temp=1;
for(int i=0;i<num;i++){
if(i!=ii){
temp*=(x-a[i][0]);
temp/=(a[ii][0]-a[i][0]);
}
}
y+=a[ii][1]*temp;
}
}
//2 0.5
// 2.5 0.4
// 4 0.25