您的位置:首页 > 其它

PAT 1081. Rational Sum (20)

2015-11-23 21:37 591 查看
要化简输入的分子 分母

不然测试点3会错  恐怕是溢出了

#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
#include<stack>
using namespace std;
#define INF 100000000
#define min(a,b) a<b?a:b
void Swap(char *s,char *b)
{
char t=*s;
*s=*b;
*b=t;
}
int  gcd(int m,int n)
{
int t=1;

while(t!=0)
{
t=m%n;
m=n;
n=t;

}

return m;
}
int main()
{
int n;
int t1,t2;
int a[101],b[101];
int s1,s2;
scanf("%d",&n);
s1=s2=1;
int t;
for(int i=0;i<n;i++)
{
scanf("%d/%d",&a[i],&b[i]);
t=gcd(abs(a[i]),b[i]);
if(t!=1)
{
a[i]/=t;
b[i]/=t;
}
}

s1=0;
t2=b[0];
s2=b[0];
for(int i=1;i<n;i++)
{
if(a[i]==0)
continue;
t2=gcd(b[i],s2);
s2=s2/t2*b[i];
}
for(int i=0;i<n;i++)
{
if(a[i]==0)
continue;
s1+=s2/b[i]*a[i];
}

if(s1!=0)
{
t1=gcd(abs(s1),s2);

s1/=t1;
s2/=t1;
}

if(s1==0)
printf("0\n");
else if(s2==1)
printf("%d\n",s1);
else {
if(abs(s1)/s2!=0)
printf("%d ",abs(s1)/s2);
printf("%d/%d\n",s1%s2,s2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: