分数加法

分数加法

时间限制 : 1sec / 空间限制: 256MB

题意:

给你2个分数,求他们的和,并要求和为最简形式。

输入:

一行,包含四个正整数a,b,c,d(0<a,b,c,d<=1000),每两个整数之间用一个空格分隔,表示两个分数a/b 和 c/d。

输出:

输出两个整数e和f,用一个空格分隔,表示a/b + c/d的最简化结果是e/f。

样例一:

输入:

83 28 34 44

输出:

1151 308

样例二:

输入:

97 26 33 13

输出:

163 26


C

#include <stdio.h>

int gcd(int a,int b)
{
	return b==0?a:gcd(b,a%b);
}
int main(){
	int a,b,c,d;
	scanf("%d%d%d%d",&a,&b,&c,&d);
	int t=gcd(b,d);
	int m=b*d/t;
	int k=m/b*a+m/d*c;
	int x=gcd(k,m);
	int q1=k/x;
	int q2=m/x;
	printf("%d %d\n",q1,q2);
	return 0;
}

C++

#include<iostream>
using namespace std;
int myFunction(int m, int n){
    if(n == 0){
        return m;
    }
    return myFunction(n,m%n);
}
int main(){
    int a, b, c, d;
    int x;
    int y;
    cin>>a>>b>>c>>d;
    x = a*d+b*c;
    y = b*d;
    int t = myFunction(x,y);
    cout<<x/t<<" "<<y/t<<endl;

return 0;
}

Java


import java.util.Scanner;
public class Main {

	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int a, b, c, d;
	    int x;
	    int y;
	    a = input.nextInt();
	    b = input.nextInt();
	    c = input.nextInt();
	    d = input.nextInt();
	    x = a*d+b*c;
	    y = b*d;
	    int t = myFunction(x,y);
	    System.out.println(x/t+" "+y/t);

	}
	
	/**
	 * 递归求最大公约数
	 * @param a
	 * @param b
	 * @return
	 */
	public static int myFunction(int m, int n){
	    if(n == 0){
	        return m;
	    }
	    return myFunction(n,m%n);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40794973/article/details/83795977
今日推荐