分数加法
时间限制 : 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);
}
}