方法1:
成都创新互联专注于通化网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供通化营销型网站建设,通化网站制作、通化网页设计、通化网站官网定制、小程序定制开发服务,打造通化网络公司原创品牌,更为您提供通化网站排名全网营销落地服务。
递归、循环、楼上的说的很详细了
方法2:
高精度+二分
下附法2的程序,大概在x=5000时可以1s跑出(我的7年老电脑上。。。)
你的机子肯定能跑更大的。。。
结果的位数如果不够在maxn那里改,不过谁也算不出1000w位吧,应该够了。。。
在文件"hello.in"中输入,输出在"hello.out"
#includestdio.h
#define
maxn
10000000
#define
max(a,b)
ab?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(;i;i=i1)
a[++j]=i1;
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语言中计算x的n次方可以用库函数pow来实现。函数原型:double pow(double x, double n)。
具体的代码如下:
#include stdio.h
#include math.h
int main( )
{
printf("%f",pow(x,n));
return 0;
}
注:使用pow函数时,需要将头文件#includemath.h包含进源文件中。
扩展资料:
使用其他的方法得到x的n次方:
#includestdio.h
double power(double x,int n);
main( )
{
double x;
int n;
printf("Input x,n:");
scanf("%lf,%d",x,n);
printf("%.2lf",power(x,n));
}
double power(double x,int n)
{
double a=1.0;
int i;
for(i=1;i=n;i++)
a*=x;
return a;
}
1、新建一个c语言的工程文件,引入头文件,这里先定义一个poewer函数处理x的y次方的计算,定义两个参数n和k,分别表示输入的数和要求的次方数:
2、在poewer函数中药考虑k次方为1和0的情况,之后用递归的方式将n乘以不断减小的k即刻完成n次方的计算。之后在主函数定义输入的数据,用scanf函数接受值,在调用power函数计算,最后输出结果即可:
3、运行程序,首先输入数字5,按下回车,接着输入数字6然后回车,最终程序打印出了5的6次方的结果。以上就是用C语言求X的Y次方的演示:
double pow(double x, double y);
pow()用来计算以x 为底的 y 次方值,然后将结果返回
可能导致错误的情况:
如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。
如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。
如果返回值 ret 太大或者太小,将会导致 range error 错误。
错误代码:
如果发生 domain error 错误,那么全局变量 errno 将被设置为 EDOM;
如果发生 pole error 或 range error 错误,那么全局变量 errno 将被设置为 ERANGE。
注意,使用 GCC 编译时请加入-lm。
#includestdio.h
#includemath.h
intmain()
{ printf("7 ^ 3 = %f\n",pow(7.0,3.0));
printf("4.73 ^ 12 = %f\n",pow(4.73,12.0));
printf("32.01 ^ 1.54 = %f\n",pow(32.01,1.54));
return0;}
输出结果:
7 ^ 3 = 343.000000
4.73 ^ 12 = 125410439.217423
32.01 ^ 1.54 = 208.036691
C语言中计算x的n次方可以用库函数来实现。具体的代码如下:
#include stdio.h
#include math.h
int main( ) {printf("%f",pow(x,n));return 0;}
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作。
扩展资料:
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
参考资料来源:百度百科-C语言
#include "stdio.h"
void main()
{
int x,n;
long sum=1;
printf("请输入x:");
scanf("%d",x);
printf("请输入n:");
scanf("%d",n);
printf("%d的%d次方是",x,n);
for(int i=1;i=n;i++)
sum*=x;
printf("%d\n",sum);
}