编程问题 小弟c++初级 请教高手

来源:百度知道 编辑:UC知道 时间:2024/09/22 09:33:27
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
这是我编的 过不了
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int main()
{
//ifstream cin("aaa.txt");

for(int n;cin>>n&&n;)
{
int j,k,a=0,b=0;
for(int i=2;pow(n,1.0/i)>=2;i++)
{
j=pow(n,1.0/i);
int x=j;
for(int k=1;x<n;k++)
{
x*=j;
}
if(x==n)
{
a=j;b=k;
}
}
cout<<a<<" "<<b<<endl;
}
}
一楼的.我在vc6.0环境下根本运行不了 你的...

终于明白了,原来是,题目意思没有理解正确。要求输入的时候可以多行,而不是输入一个数之后马上出结果。下面是正确的。

#include<iostream>
#include<math.h>
using namespace std;
void main()
{
int i,j,k,l,flag,a,b,arry[20],count=0;
cin>>arry[count];
while(arry[count]!=0)
{
count++;
cin>>arry[count];
}

for(l=0;l<count;l++)
{
a=0;
b=0;
flag=0;
for(i=(int)sqrt((double)arry[l]);i>1;i--)
{
j=arry[l];
for(k=0;j%i==0&&j>=i;)
{
k++;
j=j/i;
}
if(j==1)
{
a=i;
b=k;
flag=1;
break;
}
if(flag) break;
}
cout<<a<<" "<<b<<endl;
}

}

#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int ma