2 getpower的两个参数都要求是int,你改成了double
3 y==0的时候结果是1,代码没有处理这个情况
4 y<0的时候,只计算了一次,循环不起作用。
你的程序我帮你改完了(改动的地方见注释)
因为你没按照题目要求用递归方法写double getpower(int x,int y),
所以我按照题目要求重写了main函数(因为x,y为整数)和getpower函数.
(重写的程序在后面)
#include<stdio.h>
//#include<stdlib.h>//这里去掉这句,没有用到
//#include<math.h>//这里去掉这句,没有用到
double getpower(double x,double y);
int main(void){
double x,y;
while(~scanf("%lf,%lf",&x,&y)){
if(x==0) break;
double sum=getpower(x,y);
printf("%.6lf\n",sum);
}
return 0;
}
double getpower(double x,double y){
double m=x;
if(y>=0){
for(int i=0;i<y-1;i++) {
x=x*m;
}
}else{
for(int i=0;i>y-1;i--){ //这里y+1改成y-1
x=x*1.0/m;//这里x=1.0/m;改成x=x*1.0/m;
}
}
return x;
}
题目要求计算x的y次幂,x,y都是整数,且用递归函数计算,你这两点都没有达到.
按照题目要求我把程序改过来了,你看看吧.
#include<stdio.h>
double getpower(int x,int y);
int main(){
int x,y;
while(~scanf("%d,%d",&x,&y)){
if(x==0) break;
double sum=getpower(x,y);
printf("%.6lf\n",sum);
}
return 0;
}
double getpower(int x,int y){
if(y==0){
return 1;
}else if(y==1){
return x;
}else if(y==-1){
return 1.0/x;
}else if(y>1){
return x*getpower(x,y-1);
}else{
return 1.0/x*getpower(x,y+1);
}
}