首页 > 试题广场 >

三角形

[编程题]三角形
  • 热度指数:13 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

已知在二维平面上的三个点,ABC,若 ABC在同一直线上,则输出 0;否则输出 ABC围成的三角形的面积。


输入描述:

输入数据:

输入数据一共3行,每行2个数,依次为Ax,Ay,Bx,By,Cx,Cy,代表三个点的坐标。

输入数据保证为整数;对于50%的数据,-10000 <= Ax,Ay,Bx,By,Cx,Cy <= 10000;对于100%的数据,-1000000000 <= Ax,Ay,Bx,By,Cx,Cy <= 1000000000。

 




输出描述:

输出数据:

输出数据一共1行,为三点围成的三角形的面积,输出数据小数点后保留2位。(若三点共线,则输出0.00)。

示例1

输入

0 0
3 0
0 4

输出

6.00
示例2

输入

-1000000000 -1000000000
999999999 -1000000000
0 999999999

输出

1999999998000000000.50
直接写代码。要注意的是,此题涉及到了大数运算,普通的long放不下,需要用到BigDecimal,相关构造方法和使用方法自行查找。

代码如下:
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
    BigDecimal Ax = sc.nextBigDecimal();
    BigDecimal Ay = sc.nextBigDecimal();
    BigDecimal Bx = sc.nextBigDecimal();
    BigDecimal By = sc.nextBigDecimal();
    BigDecimal Cx = sc.nextBigDecimal();
    BigDecimal Cy = sc.nextBigDecimal();
    BigDecimal res1 = Bx.subtract(Ax);//Bx-Ax
    BigDecimal res2 = Cy.subtract(Ay);//Cy-Ay
    res1 = res1.multiply(res2);//(Bx-Ax)*(Cy-Ay)
    BigDecimal res3 = By.subtract(Ay);
    BigDecimal res4 = Cx.subtract(Ax);
    res3 = res3.multiply(res4);
    res1 = res1.subtract(res3);
    res1 = res1.divide(new BigDecimal("2"));
    res1 = res1.abs();
    System.out.println(res1.setScale(2));
}

发表于 2021-06-22 20:39:01 回复(0)