帮帮小弟我.~~~哪错了.

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

/*  
  求一个正整数是否是三次方数  
  bool   judge(unsigned   long   num);    
  xia01ei.unibbs.net    
  */  
  #include   <iostream>  
  #include   <cmath>  
  bool   judge(unsigned   long   num)  
  {  
  for(int   i=int(pow(num,1.0/4));i<int(pow(num,1.0/2));i++)  
  {  
  if(num==i*i*i)  
  return   true;  
  }  
  return   false;  
  }  
  int   main(void)  
  {  
  bool   td;  
  unsigned   long   num;  
  while(1)  
  {  
  std::cin>>num;  
  td=judge(num);  
  if(td)  
  std::cout<<"是三次方数"<<std::endl;  
  else  
  std::cout<<"不是三次方数"<<std::endl;  
  }  
  return   0;  
  }  
   
   
   
  //不知道哪错了..只需要改一下...不要求重写

· 网友精彩回答:

发表者:changpei

for(int   i=1;   i<num;i++)  
  {  
  if(num==i*i*i)  
  return   true;  
  }  
   
 

发表者:i_noname

没错啊,可以正常运行。  
  不过最好在while(1)里面加一个中断点,要不就是个死循环了

发表者:lcrystal623

拿8来举例吧,8开1/4次方得1.68,但转换为int得1,我想你应该是以为会四舍五入了吧,而1/2次方得2.83,转换为int得2,所以你的条件变成了  
  for(int   i   =   1;   i   <   2;   i++)  
  显然会返回false

发表者:lcrystal623

啊,居然慢了一步

发表者:snowbirdfly

支持5楼。  
  错误就是for(int   i=int(pow(num,1.0/4));i<=int(pow(num,1.0/2));i++)  
  可以改为for(int   i=0;i   <=   pow(num,1.0/2);i++)  
 

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved