题目
pata1081
题目思路
本题需要编写一个分数相加的程序,每输入一个分数相加即可。
参考代码
#include<iostream>
using namespace std;
typedef struct{
int num;
int de;
}fen;
void sum(fen &f1,fen f2);
int to(int a,int b);
int main()
{
int n,k=0;
cin>>n;
fen f[n];
fen s;
s.num=0;
s.de=1;
for(int i=0;i<n;i++)
{
scanf("%d/%d",&f[i].num,&f[i].de);
sum(s,f[i]);
}
k=s.num/s.de;
s.num=s.num%s.de;
if(k!=0||(k==0&&s.num==0))
printf("%d",k);
if(s.num!=0)
{
if(k!=0)
printf(" ");
printf("%d/%d",s.num,s.de);
}
return 0;
}
void sum(fen &f1,fen f2)
{
int f=1;
f1.num=f1.num*f2.de+f2.num*f1.de;
f1.de=f1.de*f2.de;
if(f1.num<0)
{
f=-1;
f1.num*=f;
}
int k=to(f1.num,f1.de);
f1.num/=k;
if(f1.num==0)
f1.de=1;
else
f1.de/=k;
f1.num*=f;
}
int to(int a,int b)
{
int k=a<b?a:b;
for(;k>=1;k--)
{
if(a%k==0&&b%k==0)
break;
}
if(k==0)
k=1;
return k;
}