思路
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); } }