牵风 发表于 2021-11-4 16:42:56

oj显示输出超限怎么解决

#include <stdio.h>
#include <math.h>
double getpower(int x,int y);

int main() {
        signed int x,y;//符号参量
        while(scanf("%d %d",&x,&y)!=EOF) {
                double result;
                result=x*getpower(x,y-1);//递归
                if(x==0)
                        break;//x=0跳出循环
                printf("%f\n",result);

        }
        return 0;
}

double getpower(int x,int y) {
        double a;
        a=pow(x,y);

        return a;

}

jackz007 发表于 2021-11-4 17:10:54

         你这个代码是计算什么的?

jhq999 发表于 2021-11-4 17:11:32

printf("%lf\n",result);//double 用%lf格式输出

牵风 发表于 2021-11-4 17:12:01

jackz007 发表于 2021-11-4 17:10
你这个代码是计算什么的?

x的y次方的递归函数

牵风 发表于 2021-11-4 17:24:31

jhq999 发表于 2021-11-4 17:11


不行啊

jackz007 发表于 2021-11-4 17:25:19

牵风 发表于 2021-11-4 17:12
x的y次方的递归函数

      不会是用递归函数计算 x ^ y 吧?

牵风 发表于 2021-11-4 17:31:49

jackz007 发表于 2021-11-4 17:25
不会是用递归函数计算 x ^ y 吧?

就是用递归函数计算x的y次方

jackz007 发表于 2021-11-4 17:36:25

本帖最后由 jackz007 于 2021-11-4 17:39 编辑

牵风 发表于 2021-11-4 17:31
就是用递归函数计算x的y次方

#include <stdio.h>

int powerx(int x , int y)
{
      return (! y) ? 1 : x * powerx(x , y - 1)    ;
}

int main()
{
      int x , y                                 ;
      while(scanf("%d%d" , & x , & y) != EOF) {
                if(! x) break                     ;
                else printf("%d\n" , powerx(x , y)) ;
      }
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
5 2
25
5 3
125
3 3
27
0 0

D:\0002.Exercise\C>

牵风 发表于 2021-11-4 17:46:58

jackz007 发表于 2021-11-4 17:36
编译、运行实况:

能解释下return(! y)和if(! x)是什么意思吗

jackz007 发表于 2021-11-4 17:57:53

牵风 发表于 2021-11-4 17:46
能解释下return(! y)和if(! x)是什么意思吗

      ! 是逻辑反运算符,当 x 的值为 0 的时候,对应的逻辑值为 false,不为零的时候逻辑值为 true,而如果在前面加上 ! 运算符,逻辑值正好相反。所以,if(x) 等价于 if(x != 0),if(! x) 等价于 if(x == 0)
      ! x 和 ! y 就是 x == 0 和 y == 0 的意思,至于 return 那一句,你应该知道 C 语言的三目运算符吧?

jhq999 发表于 2021-11-4 17:58:25

没毛病

牵风 发表于 2021-11-4 17:58:26

jackz007 发表于 2021-11-4 17:57
! 是逻辑反运算符,当 x 的值为 0 的时候,对应的逻辑值为 false,不为零的时候逻辑值为 true, ...

哦哦懂了

jackz007 发表于 2021-11-4 17:59:29

牵风 发表于 2021-11-4 17:58
哦哦懂了

      如果问题已经解决,不要忘记设置 "最佳答案" 哦。

牵风 发表于 2021-11-4 18:00:23

jhq999 发表于 2021-11-4 17:58
没毛病

我的也能运行但在oj上就显示输出超限

jhq999 发表于 2021-11-4 18:00:34

牵风 发表于 2021-11-4 17:31
就是用递归函数计算x的y次方

这也不是递归

牵风 发表于 2021-11-4 18:02:37

jhq999 发表于 2021-11-4 18:00
这也不是递归

那能不能告诉我一下递归的话咋改{:5_92:}

jhq999 发表于 2021-11-4 18:11:36

本帖最后由 jhq999 于 2021-11-4 18:12 编辑

牵风 发表于 2021-11-4 18:02
那能不能告诉我一下递归的话咋改

double getpower(int x,int y) {
          
      double a=1;
        if (y>1) a=getpower(x,y-1);
      return a*x;

}

牵风 发表于 2021-11-4 18:16:03

jhq999 发表于 2021-11-4 18:11


谢谢

jhq999 发表于 2021-11-4 18:23:26

本帖最后由 jhq999 于 2021-11-4 18:31 编辑


#include <stdio.h>
double getpower(double x,int y);
int main() {
      signed int x,y;//符号参量
      while(scanf("%d %d",&x,&y)!=EOF) {
                double result;
                result=getpower(x,y);//递归
                if(x==0)
                        break;//x=0跳出循环
                printf("%lf\n",result);

      }
      return 0;
}

double getpower(double x,int y)
{
        if (y>1) x=getpower(x,y-1)*x;
      return x;

}



double getpower(double x,int y)
{
      double a=1;
        while(y--)a*=x;
      return a;

}
页: [1]
查看完整版本: oj显示输出超限怎么解决