您的位置:首页 > 其它

nyoj-111-分数加减法

2014-11-28 01:56 507 查看


分数加减法

时间限制:3000 ms | 内存限制:65535 KB

难度:2

描述 编写一个C程序,实现两个分数的加减法

输入输入包含多行数据

每行数据是一个字符串,格式是"a/boc/d"。

其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束

输入数据保证合法输出对于输入数据的每一行输出两个分数的运算结果。

注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数样例输入
1/8+3/8
1/4-1/2
1/3-1/3

样例输出
1/2
-1/4
0

来源水题比赛上传者hzyqazasdf
#include<cstdio>//have some problem , 看以后能不能检查出来 , 再修改
#include<iostream>
#include<cstdlib>
using namespace std;
int gcd(int a,int b)
{
    if(a<b)
    {
        int temp=a;
        a=b;
        b=temp;
    }
    if(a%b == 0)
        return abs(b);
    else return gcd(b,a%b);
}

int main()
{
    int a,b,c,d;
    char o;
    while(~scanf("%d/%d%c%d/%d",&b,&a,&o,&d,&c))
    {
        int m;
        if(o=='+')m=gcd(a*c,b*c+a*d);
        else m=gcd(a*c,b*c-a*d);
        if(o=='-'&&b*c-a*d==0)cout<<"0"<<endl;
        else if(a*c/m==1)
            cout<<(b*c+a*d)/m<<endl;
        else cout<<((b*c+a*d)/m)<<"/"<<(a*c/m)<<endl;
    }
    return 0;
}

#include <iostream>
#include<cstdlib>
using namespace std;
int yinshu(int x,int y)
{
    if(x<y)
    {
        int tmp;
        tmp = x;
        x = y;
        y = tmp;
    }
    if(x%y == 0)
        return abs(y);
    else
        return yinshu(y,x%y);
}
int main(void)
{
    int a,b,c,d;
    char optr,num;
    while(cin >> a >> num >> b >> optr >> c >> num >> d)
    {
        int x,y;
        switch(optr)
        {
        case '+':
        {
            x = a*d+b*c;
            y = b*d;
            break;
        }
        case '-':
        {
            x = a*d-b*c;
            y = b*d;
            break;
        }
        }
        if(x == 0)
            cout << 0 << endl;
        else if(y/yinshu(x,y) == 1)
            cout << x/yinshu(x,y) << endl;
        else
            cout << x/yinshu(x,y) << "/" << y/yinshu(x,y) << endl;
    }
    return 0;
}

#include<stdio.h>
char str[20];
int Gcd(int m,int n)
{
	if (m==0) return n;
	return Gcd(n%m,m);
}
int main()
{
	int fz,fm,gcd;
	while(scanf("%s",str)!=EOF)
	{
		if(str[3]=='-')
			fz=(str[0]-'0')*(str[6]-'0')-(str[2]-'0')*(str[4]-'0');
		else fz=(str[0]-'0')*(str[6]-'0')+(str[2]-'0')*(str[4]-'0');
		if(fz)
		{
			fm=(str[2]-'0')*(str[6]-'0');
			gcd=Gcd(fz,fm);
			if(gcd<0) gcd=-gcd;
			if(fm/gcd==1) printf("%d\n",fz/gcd);
			else printf("%d/%d\n",fz/gcd,fm/gcd);
		}
		else puts("0");
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: