递归、循环、楼上的说的很详细了
方法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。