c语言 x的x次方用2种以上方法

Python011

c语言 x的x次方用2种以上方法,第1张

方法1:

递归、循环、楼上的说的很详细了

方法2:

高精度+二分

下附法2的程序,大概在x=5000时可以1s跑出(我的7年老电脑上。。。)

你的机子肯定能跑更大的。。。

结果的位数如果不够在maxn那里改,不过谁也算不出1000w位吧,应该够了。。。

在文件"hello.in"中输入,输出在"hello.out"

#include<stdio.h>

#define

maxn

10000000

#define

max(a,b)

a>b?a:b

int

x,a[maxn],b[maxn],o

int

ans[maxn],p

int

s3[maxn]

void

Mult(int

s1[],int

*l1,int

s2[],int

l2)

{

int

i,j

for(i=1

i<=*l1+l2+2

i++)

s3[i]=0

for(i=1

i<=*l1

i++)

for(j=1

j<=l2

j++)

s3[i+j-1]+=s1[i]*s2[j]

j=*l1+l2-1

for(i=1

i<=j

i++)

if(s3[i]>9)s3[i+1]+=s3[i]/10,s3[i]%=10,j=max(j,i+1)

for(i=1

i<=j

i++)

s1[i]=s3[i]

*l1=j

}

void

Init(void)

{

int

i,j=0,k

i=x

p=1

ans[1]=1

for(ii=i>>1)

a[++j]=i&1

while(x)

b[++o]=x%10,x/=10

for(i=j

i

i--)

{

Mult(ans,&p,ans,p)

if(a[i])

Mult(ans,&p,b,o)

}

for(i=p

i>=1

i--)

printf("%ld",ans[i])

printf("\n")

}

int

main(void)

{

freopen("hello.in","r",stdin)

freopen("hello.out","w",stdout)

scanf("%ld",&x)

Init()

return

0

}

C语言中除了使用函数pow实现乘方运算,没有其他的运算符号可以用来直接表示乘方,就算自己实现也只能是以函数的形式体现出来。

1、C语言中计算一个数的N次方可以用库函数pow来实现,还可以直接使用2^3就可以算出结果。pow函数原型:double pow(double x,double y)。其中x值是底数,y值是幂。

举例:

double a=pow(3.14,2)计算3.14的平方。

注意:使用pow函数时,需要将头文件#include<math.h>包含进源文件中。

2、在C语言中,10的n次方可以表示为pow(10,n)。其中pow函数在头文件math.h中,所以调用该函数的时候,必须将math.h加进来,即#include<math.h>。

原型:extern float pow(float x,float y)

功能:计算x的y次幂。

说明:x应大于零,返回幂指数的结果。

C语言的应用:

1、操作系统,C语言最著名的应用领域就是操作系统了,目前所有的操作系统内核都是C语言写的,最著名的就是Unix和Linux了。

2、单片机,由于C语言在位操作上的优越性,在单片机领域,C语言也一直独领风骚,虽然现在出现了一些用其他编程语言操作单片机的方法,但也都是用C语言封装过的,可以说核心还是C语言。

3、驱动程序,无论是操作系统或者单片机,对硬件的驱动除了汇编(比较繁琐),都是用C语言来编写。

4、编译器或解释器,由于C语言效率高的特点,很多编译器也选择的使用C语言来开发。

5、系统服务,由于操作系统都提供了C语言的API,并且C语言的执行效率比较高,所以用C语言来写系统服务是最适合不过的。

6、应用软件,由于C语言没有成熟的开发框架,所以不适合开发大型应用程序。但也有一些对效率要求比较高的程序使用C语言开发,如Git。