[ACM 1002] 数字游戏

[ACM 1002] 数字游戏

数字游戏
Time Limit:1000MS  Memory Limit:1024K

Description:

最近Catcher对数字游戏很感兴趣,他发明了一种新的游戏,给出一个数N,问N是否能表示成某个正整数X的K次幂(K>1),N可能有多种表示方法,请找出最大的X并输出相应的K。例如 16=2^4=4^2,64=4^3=2^6=8^2则16应表示为4^2,64应表示为8^2。

Input:

每行一个正整数N,输入文件以0为结束标志。(0<N<10^8)

Output:

每行有两个整数,如果能表示,则输出X K,(中间用一个空格隔开)如果不能,则输出0 0;

Sample Input:

5
4
16
27
0

Sample Output:

0 0
2 2
4 2
3 3

Source:

Jin Qiwei
/**/ /*
**    Author    :flysky
**  date    :2008-01-20    
**    Description: 
http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1002
*/

#include 
< iostream >
#include 
< math.h >
using   namespace  std;

#define  MAX 50

void  solve( int  number)
{
    
int k=sqrt(number);
    
for(int i=k;i>1;--i)
    
{
        
int j=2;
        
bool loop=true;
        
while(loop)
        
{
            
if(pow(i,j)==number)
            
{
                cout
<<i<<" "<<j<<endl;
                
return;
            }

            
else if(pow(i,j)>number)
                loop
=false;
            
else
                j
++;
        }

    }

    cout
<<0<<" "<<0<<endl;
}


int  main()
{
    
int input[MAX];
    
int len=0;
    
while((cin>>input[len])&&input[len]!=0)
    
{
        
if(input[len]<0||input[len]>pow(10,8))
            
continue;
        len
++;
    }

    
for(int i=0;i<len;++i)
        solve(input[i]);
    
return 0;
}

你可能感兴趣的:([ACM 1002] 数字游戏)