Spoj:ENIGMATH - 玩数学游戏
问题描述:
为什么我在这个问题上超出了时间限制?链接:http://www.spoj.com/problems/ENIGMATH/Spoj:ENIGMATH - 玩数学游戏
lcm很容易用两个数字的gcd帮助计算出来。用于计算gcd欧几里得算法。
#include<iostream>
using namespace std;
long long int gcd(long long int a,long long int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
long long int t,a,b,lcm,i=0;
cin>>t;
while(i<t)
{
cin>>a>>b;
if(a==b)
cout<<"1 1\n";
else
{
lcm=(a*b)/gcd(a,b);
cout<<lcm/a<<" "<<lcm/b<<"\n";
}
}
return 0;
}
答
你是不是在循环更新i
,所以除非你输入负值或者零t
会失败陷入死循环。
尝试通过更改i<t
到i++<t
或其他您喜欢的方式进行更新。
答
您可以尝试这种方式...谢谢。
#include<iostream>
using namespace std;
long long int gcd(long long int a,long long int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
long long int t,a,b,lcm,i=0;
cin>>t;
while(i<t)
{
cin>>a>>b;
if(a==b)
cout<<"1 1\n";
else
{
lcm=(a*b)/gcd(a,b);
cout<<lcm/a<<" "<<lcm/b<<"\n";
}
i += 1;//Here was mistook.
}
return 0;
}