N个数的和
请计算下面 20 个分数的和:
497/10
102/13
63/13
65/4
174/19
159/10
339/62
266/31
235/67
121/49
257/75
260/7
316/45
230/49
836/87
573/59
58/25
373/55
59/12
982/75
最终输出一个 x/y 这种格式的分数(数字和/
之间没有空格,最终的分数是已经约过分的分数)。
提醒:最后的数据可能比较大
package 蓝桥杯2018年B组第四次模拟赛; import java.util.Scanner; public class N个数的和 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); String[] strs=new String[20]; for(int i=0;i<20;i++){ strs[i]=scan.next(); } String sum=strs[0]; for(int i=1;i<20;i++){ sum=fun(sum,strs[i]); } System.out.println(sum); } public static String fun(String str1,String str2){ long fenzi1=Long.parseLong(str1.substring(0,str1.indexOf("/"))); long fenmu1=Long.parseLong(str1.substring(str1.indexOf("/")+1)); long fenzi2=Long.parseLong(str2.substring(0,str2.indexOf("/"))); long fenmu2=Long.parseLong(str2.substring(str2.indexOf("/")+1)); long fenmu=gbs(fenmu1,fenmu2); long fenzi=fenzi1*(fenmu/fenmu1)+fenzi2*(fenmu/fenmu2); for(int i=2;i<=Math.min(Math.sqrt(fenzi),Math.sqrt(fenmu));i++){ if(fenzi%i==0&&fenmu%i==0){ fenzi=fenzi/i; fenmu=fenmu/i; } } return fenzi+"/"+fenmu; } public static long gbs(long num1,long num2){ long num=Math.max(num1, num2); for(int i=1;;i++){ if(num*i%num1==0&&num*i%num2==0){ return num*i; } } } }