洛谷——P1888 三角函数

Posted on 2024-03-17 20:36  奇诺qwq  阅读(69)  评论(0编辑  收藏  举报

 

 思路

1、输入的数一定为勾股数,斜边长max,正弦角所对的边min,则所求正弦值=min/max(需要约分,用gcd最大公约数)。则用数组存入数据并升序排序

2、用gcd求最大公约数(辗转相除法)

若a>b,gcd(a,b) = gcd(b,a%b)=……=(直到余数为0)a%b

3、正弦值分子=min/gcd,正弦值分母=max/gcd

tips:lcm(最小公倍数):gcd(a,b) * lcm(a,b) =  a*b

 

法一:(自己实现gcd)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        long[] arr = new long[3];
        for (int i = 0; i < 3; i++) {
            arr[i] =sc.nextInt();
        }
        Arrays.sort(arr);
        long g = gcd(arr[2],arr[0]);
        String a1 = arr[0]/g+"";
        String b1 = arr[2]/g+"";
        System.out.println(a1+'/'+b1);
    }
    //计算最大公约数
    static long gcd(long a,long b){
        //数字大的在前面
        if(a<b){
            long temp = a;
            a=b;
            b=temp;
        }
        //辗转相除法gcd(max,min)=gcd(min,max%min)
        if(a%b!=0){
            return gcd(b,a%b);
        }
        return b;
    }
}

 

法二:(使用BigInteger类中的gcd)

BigInteger类的使用链接:http://t.csdnimg.cn/ZjeHB

http://t.csdnimg.cn/lTR2a

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;

public class t1 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        BigInteger[] arr = new BigInteger[3];
        for (int i = 0; i < 3; i++) {
            //将字符串类型转化为BigInteger类型
            arr[i] = new BigInteger(sc.next());
        }
        Arrays.sort(arr);
        //BigInBigInteger == > long:long 变量名=BigIntegerl类型的变量.longValue() 
        long g = arr[2].gcd(arr[0]).longValue();
        String a1 = arr[0].longValue()/g+"";
        String b1 = arr[2].longValue()/g+"";
        System.out.println(a1+'/'+b1);
    }
}