#include <iostream>
using namespace std;
int main()
{
int a[100],b[100],c[100],d[100],e[100],f[100];
int n;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i]>>d[i];
e[i]=a[i]*d[i]+b[i]*c[i];
f[i]=b[i]*d[i];
for (int j=f[i];j>=1;j–)
{
if (e[i]%j==0 && f[i]%j==0)
{
e[i]=e[i]/j;
f[i]=f[i]/j;
}
}
}
for (int i=0;i<n;i++)
{
cout<<e[i]<<” “<<f[i]<<endl;
}
}
比较简单的分数相加问题,在VS2010上已经运行通过了,并且答案正确,但是网上提交答案就是Time Limit Exceed
望高人指点!
using namespace std;
int main()
{
int a[100],b[100],c[100],d[100],e[100],f[100];
int n;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i]>>d[i];
e[i]=a[i]*d[i]+b[i]*c[i];
f[i]=b[i]*d[i];
for (int j=f[i];j>=1;j–)
{
if (e[i]%j==0 && f[i]%j==0)
{
e[i]=e[i]/j;
f[i]=f[i]/j;
}
}
}
for (int i=0;i<n;i++)
{
cout<<e[i]<<” “<<f[i]<<endl;
}
}
比较简单的分数相加问题,在VS2010上已经运行通过了,并且答案正确,但是网上提交答案就是Time Limit Exceed
望高人指点!
解决方案
10
你这数大了就很慢了,数有多大就有多少次循环。
可以用辗转相除法。
可以用辗转相除法。
30
#include<iostream>
using namespace std;
int find(int a, int b) //求最大公 约数
{
while(a != b)
{
if(a > b) a = a -b;
else if(a < b) b = b -a;
}
return a;
}
int main()
{
int n; cin >> n;
int a, b, c, d;
int e, f;
int temp;
for(int i = 0; i < n; i++)
{
cin >> a >> b >> c >> d;
e = b * d;
f = a * d + b * c;
temp = find(e,f);
e = e/temp;
f = f/temp;
cout << f << " " << e << endl;
}
return 0;
}