一、求整数的幂次方
递归求解思路:
判断两个数(浮点数)是否相等
bool equal(double num1,double num2)
{
if(num1-num2>-0.0000001&&num1-num2<0.0000001)//由于精度要求,只要满足该范围就认为等于0
{
return true;
}
return false;
}
指数为正数的情况
double PowerwithUnsignedExponent(double base,int exponent)
{
if(exponent==0)
{
return 1;
}
if(exponent==1)
{
return base;
}
double result=PowerwithUnsignedExponent(base,exponent>>1);//递归
result*=result;
if((exponent&0x1)==1)//exponent为奇数
{
result*=base;
}
return result;
}
求整数的幂次方
double Power(double base,int exponent)
{
bool InvalidInput=false;
if(equal(base,0.0)&&exponent)//0的倒数不合法
{
InvalidInput =true;
return 0.0;
}
unsigned int absExponent=(unsigned int) exponent;
if(exponent <0)
{
absExponent =(unsigned int )(-exponent);
}
double result=PowerwithUnsignedExponent(base,absExponent);//正指数计算幂次方
if(exponent<0)//当指数为负的时候,先求正指数的情况,再求倒
{
result=1.0/result;
}
return result;
}
用“/20”替换空格
void Replaceofblank(char *str,int len)
{
assert(str!=NULL);
int originallen=0;//字符串的原始有效长度
int newlen=0;//新的字符串的长度
int i=0;
int count=0;//计算空格的个数
char *p=NULL;
char *q=NULL;
while(str[i]!='\0')
{
if(str[i]==' ')
{
count++;
}
i++;
originallen++;
}
newlen=originallen+count*2;
if(newlen>=len)
{
return ;
}
p=str+originallen-1;//p指向原字符串的最后一个字符
q=str+newlen-1;//q指向新的字符串的最后一个字符的位置
while(p<q&&p>=0)
{
if(*p==' ')
{
*q--='0';
*q--='2';
*q--='/';
p--;
}
else
{
*q--=*p--;
}
}
}