PAT-L1-009. N个数求和
2017-08-17 16:50
435 查看
备注:这道题目的第3个案例没跑过去,有想法的大神们可以帮忙找下还有啥问题
L1-009. N个数求和
时间限制400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(<=100)。随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:
5 2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2 4/3 2/3
输出样例2:
2
输入样例3:
3 1/3 -1/6 1/8
输出样例3:
7/24
import java.util.Scanner; public class Main{ public static long gys(long a,long b){ long temp; while(b!=0){ temp=a%b; a=b; b=temp; } //System.out.println("zdGys:"+a); return a; } public static long gbs(long a, long b ){ long zxGbs=1; zxGbs=a*b/gys(a,b); // System.out.println("zxGbs:"+zxGbs); return zxGbs; } public static String findSum(String str1,String str2){ String value1[]=new String[2]; value1=str1.split("/"); long fz1=Long.parseLong(value1[0]); long fm1=Long.parseLong(value1[1]); String value2[]=new String[2]; value2=str2.split("/"); long fz2=Long.parseLong(value2[0]); long fm2=Long.parseLong(value2[1]); // System.out.println("fz1,fm1,fz2,fm2:"+fz1+" "+fm1+" "+fz2+" "+fm2); long zxGbs=gbs(fm1,fm2); long fzSum=zxGbs/fm1*fz1+ zxGbs/fm2*fz2; long zdGys=gys(fzSum,zxGbs); //System.out.println("zdGys:"+zdGys); long fzRes=fzSum/zdGys; long fmRes=zxGbs/zdGys; String str=fzRes+"/"+fmRes; return str; } public static void main(String args[]){ Scanner sc = new Scanner(System.in); int inputNum=Integer.parseInt(sc.nextLine()); String finalRes; if(inputNum<=1) finalRes=sc.nextLine(); else{ //sc.useDelimiter(" "); String str1=sc.next(); String str2=sc.next(); finalRes=findSum(str1,str2); //System.out.println(finalRes); for(int i=2;i<inputNum;i++){ String str=sc.next(); finalRes=findSum(finalRes,str); } } String[] value=new String [2]; value=finalRes.split("/"); long fzRes=Long.parseLong(value[0]); long fmRes=Long.parseLong(value[1]); long zs = (long)Math.floor(fzRes/fmRes); long zdGys=gys(fzRes,fmRes); fzRes=fzRes/zdGys; fmRes=fmRes/zdGys; fzRes = fzRes % fmRes; if(fzRes >0 && fmRes <0){ fzRes*=-1; fmRes*=-1; } if(zs<0) fzRes*=-1; if(zs ==0 && fzRes!=0 ) System.out.println(fzRes+"/"+fmRes); else if(zs !=0 && fzRes==0) System.out.println(zs); else if(zs ==0 && fzRes==0) System.out.println("0"); else System.out.println(zs+" "+fzRes+"/"+fmRes); } }
相关文章推荐
- L1-009. N个数求和-PAT团体程序设计天梯赛
- PAT练习集之20分题-L1-009. N个数求和
- PAT-团体程序设计天梯赛-练习集-L1-009. N个数求和
- PAT-L1-009. N个数求和
- PAT - 天梯赛 L1-009 N个数求和
- PAT L1-009. N个数求和
- Java - PAT - L1-009. N个数求和
- PAT-L1-009. N个数求和(辗转相除法应用)
- 【题解搬运】PAT_L1-009 N个数求和
- PAT 天梯赛 L1-009 N个数求和
- PAT 天梯赛 L1-009 N个数求和
- PAT L1-009. N个数求和 分数求和 struct重载
- L1-009. N个数求和 - PAT
- PAT L1-009. N个数求和
- L1-009. N个数求和-PAT团体程序设计天梯赛GPLT
- PAT-L1-009 N个数求和
- PAT L1-009. N个数求和(辗转相除法,浮点和输出注意)
- PAT L1-009. N个数求和 模拟
- PAT L1 009 N个数求和
- L1-009 N个数求和