PTF 发表于 2021-12-5 20:11:11

求助一个取幂程序


# include< stdio.h >
# include< math.h >


int main()
{
        int a;
        int b;
        int Pow(int m, int n );
       
       
        while( 1 )
        {
               
                printf( "Please input 2 numbers:\n" );
               
                scanf( "%d, %d", &a, &b );
                getchar();
                printf( "The power is %d.\n", Pow( a, b ) );
                getchar();
        }
}


int IsEven( int Y )                                                                        //判断奇偶
{
        if( ( Y % 2 ) == 0 )
                return 1;
        else
                return 0;
}


int
Pow(int X, int N )                                                                                        //递归求幂运算
{
       if( N == 0 )
       {
               return 1;
       }       
       if( N == 1 )
       {
               return X;
       }       
       if( IsEven( N ) )
       {
               return Pow( (X * X), (N / 2) );
       }       
       else
       {
               return Pow( (X * X), (N / 2) ) * X;
               
       }       
}




//这个程序在VB6怎么也得不出正确的运算结果,不知道哪出问题了,望来个大佬解惑,感激感谢{:5_92:}

jackz007 发表于 2021-12-5 20:17:21

      什么是正确结果,把它说出来,你这个代码的目标是干什么,你不是说,没人知道,别人也不知道你的代码对不对。

PTF 发表于 2021-12-5 20:43:17

jackz007 发表于 2021-12-5 20:17
什么是正确结果,把它说出来,你这个代码的目标是干什么,你不是说,没人知道,别人也不知道你的代 ...

就是一个递归求幂的程序,输入a,b,求a的b次幂,b是偶数输出幂Pow(int X, int N )= Pow( (X * X), (N / 2) ),若b是奇数则Pow(int X, int N )= Pow( (X * X), (N / 2) ) * X,可以运行就是算不准
Please input 2 numbers:
2 5
The power is 0.
Please input 2 numbers:
12 0
The power is 0.
Please input 2 numbers:
4 1
The power is 0.
Please input 2 numbers:
2 3
The power is 0.
Please input 2 numbers:
4 6
The power is 0.
Please input 2 numbers:
5 6 65
The power is 2098733489.
Please input 2 numbers:
The power is 865578241.
20
Please input 2 numbers:
The power is 0.

Please input 2 numbers:
4 4
The power is 0.
Please input 2 numbers:

jackz007 发表于 2021-12-5 20:51:09

本帖最后由 jackz007 于 2021-12-5 20:55 编辑

PTF 发表于 2021-12-5 20:43
就是一个递归求幂的程序,输入a,b,求a的b次幂,b是偶数输出幂Pow(int X, int N )= Pow( (X * X), (N...

#include <stdio.h>

unsigned long long powerx(unsigned long long a , unsigned long long b)
{
      return (b > 0) ? a * powerx(a , b - 1) : 1                ;
}

int main(void)
{
      unsigned long long a , b                                  ;
      scanf("%I64u%I64u" , & a , & b)                           ;
      printf("%I64u ^ %I64u = %I64u\n" , a , b , powerx(a , b)) ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
2 5
2 ^ 5 = 32

D:\00.Excise\C>x
12 0
12 ^ 0 = 1

D:\00.Excise\C>x
4 1
4 ^ 1 = 4

D:\00.Excise\C>x
2 3
2 ^ 3 = 8

D:\00.Excise\C>x
4 6
4 ^ 6 = 4096

D:\00.Excise\C>x
5 6
5 ^ 6 = 15625

D:\00.Excise\C>x
4 4
4 ^ 4 = 256

D:\00.Excise\C>

PTF 发表于 2021-12-5 21:21:24

jackz007 发表于 2021-12-5 20:51
编译、运行实况:

你这个可以实现但是算法和时间复杂度不一样了,我是在做算法效率题{:10_250:}

傻眼貓咪 发表于 2021-12-5 21:24:55

PTF 发表于 2021-12-5 20:43
就是一个递归求幂的程序,输入a,b,求a的b次幂,b是偶数输出幂Pow(int X, int N )= Pow( (X * X), (N...

#include <stdio.h>
#include <math.h>

int main(){
        int POW(int b, int e);
        int a, b;
        printf("Please enter 2 integer: ");
        scanf("%d%d", &a, &b);
        printf("The power %d of %d is %d", b, a, POW(a, b));
        return 0;
}

int POW(int b, int e){
        if(!(e)) return 1;
        else if(e == 1) return b;
        else if(!(e%2)) return POW(b*b, e/2);
        else return POW(b*b, e/2)*b;
}

PTF 发表于 2021-12-5 21:49:58

傻眼貓咪 发表于 2021-12-5 21:24


解决了,多谢, 问题所在scanf("%d%d", &a, &b);的空格哈尴尬,你的代码简洁多了,学习m(_ _)m
页: [1]
查看完整版本: 求助一个取幂程序