您的位置:首页 > 其它

1081. Rational Sum (20)

2017-05-10 20:07 211 查看
#include<cstdio>
#include<algorithm>

struct Fraction
{
int up,down;
};

int gcd(int a,int b)
{
if(b == 0) return a;
else return gcd(b,a%b);
}
Fraction reduction(Fraction f1)
{
if(f1.down<0)
{
f1.up = -f1.up;
f1.down = -f1.down;
}
if(f1.up == 0)
f1.down = 1;
else
{
int x = gcd(f1.up,f1.down);
f1.up = f1.up/x;
f1.down = f1.down/x;

}
return f1;
}

Fraction add(Fraction f1,Fraction f2)
{
Fraction re;

re.up = f1.up * f2.down + f2.up * f1.down;
re.down = f1.down * f2.down;
return reduction(re);
}

//输出结果,如果是整数输出整数类型
//如果是假分数,输出整数和分数部分,否则直接输出,符号在整数前面
void show_re(Fraction f1)
{
if(f1.down == 1)
printf("%d",f1.up);
else if(abs(f1.up) > f1.down)
{
printf("%d %d/%d",f1.up / f1.down,abs(f1.up) % f1.down, f1.down);
}
else
{
printf("%d/%d",f1.up,f1.down);
}
}
using namespace std;
int main()
{
int N;
Fraction sum,temp;

sum.up = 0;
sum.down = 1;

scanf("%d",&N);
while(N--)
{
scanf("%d/%d",&temp.up,&temp.down);
temp = reduction(temp);
sum = add(sum,temp);
sum = reduction(sum);
}
show_re(sum);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: