2016-06-12 60 views
1

为什么我在这个问题上超出了时间限制?链接: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; 
} 

回答

2

你是不是在循环更新i,所以除非你输入负值或者零t会失败陷入死循环。

尝试通过更改i<ti++<t或其他您喜欢的方式进行更新。

0

您可以尝试这种方式...谢谢。

#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; 
}