为什么编译通过 执行却错误呢?求高人指点小弟
为什么编译通过 执行却异常呢?求高人指点小弟
丑数是只包括2,3,5这三种因子的数,另外一般把“1”当作第一个丑数。
然后列出1500个丑数
这是我的代码
这些是出错的截图

------解决方案--------------------
你的函数你带入power(x, 0)试一下
会发现power(x, 0)=x*power(1, 0-1)=x*power(1, -1)
=x*x*power(1, -2)
=x*x*x*power(1, -3)
就这样无限递归下去了?
------解决方案--------------------
VC2010版本的 power 你可以参考下
另外, 你的 power函数 修改成
再试试? 祝你好运!
------解决方案--------------------
这样,应该会更好点
丑数是只包括2,3,5这三种因子的数,另外一般把“1”当作第一个丑数。
然后列出1500个丑数
这是我的代码
#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include<time.h>
using namespace std;
int power(int x,int y)
{
if(1==y)return x;
return x*power(x,y-1);
}
int _tek(int i,int j,int k) //考虑到每个丑数的因子都是由若干个2,3,5组出
{
return power(2,i)*power(3,j)*power(5,k);
}
int min_2(int i,int j)
{
return i<j?i:j;
}
int min_3(int i,int j,int k)
{
return min_2(i,j)<k?min_2(i,j):k;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,k;
int tek=1;
i=k=j=0;
int r; //指示器
int ii,jj,kk;
int w=1; //计数器 1到1500
while(1)
{
ii=_tek(i+1,j,k);
jj=_tek(i,j+1,k);
kk=_tek(i,j,k+1);
tek=tek<min_3(ii,jj,kk)?tek:min_3(ii,jj,kk);
cout<<setw(10)<<tek;
if(tek==ii)
r=1;
else if(tek==jj)
r=2;
else if(tek==kk)
r=3;
else if(1==tek)
r=0;
switch(r)
{
case 0:
;break;
case 1:
++i;break;
case 2:
++j;break;
case 3:
++k;break;
}
++w;
if(1500==w)
break;
}
double t; //计算运行时间的代码
clock_t time;
time=clock();
t=(double)time/CLK_TCK;
cout<<" time is "<<t<<" seconds "<<endl;
return 0;
}
这些是出错的截图
异常
------解决方案--------------------
你的函数你带入power(x, 0)试一下
会发现power(x, 0)=x*power(1, 0-1)=x*power(1, -1)
=x*x*power(1, -2)
=x*x*x*power(1, -3)
就这样无限递归下去了?
------解决方案--------------------
VC2010版本的 power 你可以参考下
template<class int_type>
inline
int_type power(int_type base, int_type exponent)
{
int_type result = 1;
for ( int i = 0; i < exponent; ++i )
{
result *= base;
}
return result;
}
另外, 你的 power函数 修改成
int power(int x,int y)
{
if(0==y)return x;
return x*power(x,y-1);
}
再试试? 祝你好运!
------解决方案--------------------
int power(int x,int y)
{
if(0==y)return x;
if(0>y) return x / power( x, -y+1 );
return x*power(x,y-1);
}
这样,应该会更好点