简单的c语言问题,高手看下!!

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:29: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<stdio.h>
#include<math.h>
int main()
{
int n,m,flag=0,i,t=0;
while(scanf("%d",&n)&&(n!=0)){
m=n;/*n=i^t*/
for(i=(int)sqrt(n);i>=2;i--){/*枚举i的值*/
while((m%i==0)&&(m!=1)){/*让m一直除以i*/
m=m/i;
t++;/*表示整除的次数即它的指数*/
}
if(m==1){/*除尽跳出循环*/
flag=1;/*标志符*/
break;
}
m=n;/*除不尽m初始化,进行下一个循环*/
}
if(flag==1) printf("%d %d\n",i,t);
else printf("0 0\n");
flag=0;/*初始化读入下一个n*/
t=0;

事实上我看出了一个问题...
while((m%i==0)&&(m!=1))
明显地..(m!=1)是多出来的...
如果m=1的话... m%i 也不会 = 0..

OJ新手最容易犯的问题:你认为你所有的情况的考虑了吗??哈哈哈哈

只要你运行对了就是对了,不要看那些在线运行的东西,没有意义