当前位置: 代码迷 >> C语言 >> X的多次幂,不知道咋写了
  详细解决方案

X的多次幂,不知道咋写了

热度:404   发布时间:2008-06-05 10:30:12.0
X的多次幂,不知道咋写了
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-05 02:30:12
Loli

来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
  得分:0 
你都会说用循环啦,请问1+2+3+...+n你会写不



[color=white]
----------------解决方案--------------------------------------------------------
书上应该找的到!
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-05 03:01:00
pinglideyu

来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:734
专家分:136
注 册:2007-1-7
  得分:0 
好像可以用数学库函数double pow(double x,double y);
表示的是x的y次幂。
----------------解决方案--------------------------------------------------------
用一个FOR循环。连续相乘~
----------------解决方案--------------------------------------------------------
快速幂
复杂度O(logn)
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int mi(int da_an,int x,int n);

int main(void)
{
   int x,n,da_an=1;
   printf("please input x:");
   scanf("%d",&x);

   printf("please input n:");
   scanf("%d",&n);

   da_an=mi(da_an,x,n);
   printf("%d",da_an);
}

int mi(int da_an,int x,int n)
{
   int i;
   for(i=0;i<n;i++)
   {
     da_an=da_an*x;
   }
   return(da_an);
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>



#define IsEven( N ) ( ( N ) % 2 == 0 )





   long int Pow( long int X, unsigned 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;

        }
----------------解决方案--------------------------------------------------------
楼上的虽然logn,但效率却高不起来
事实上非递归写法更漂亮



[color=white]
----------------解决方案--------------------------------------------------------
  相关解决方案