问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-28 16:26

我来回答

5个回答

热心网友 时间:2022-06-19 17:13

方法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(;i;i=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;
}

热心网友 时间:2022-06-19 17:13

方法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(;i;i=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;
}

热心网友 时间:2022-06-19 17:14

//方法1:使用库函数pow
#include<stdio.h>
#include<math.h>
int main(){
double x,y;
printf("x=");
scanf("%lf",&x);
y=pow(x,x);
printf("y=%.4lf\n",y);
return 0;
}
////////////////////////////////////////////////////
//方法2:自定义求x的y次方的函数
#include<stdio.h>
#include<math.h>
double mypow(double x, double y){
return exp(x*log(x));
}
int main(){
double x,y;
printf("x=");
scanf("%lf",&x);
y=mypow(x,x);
printf("y=%.4lf\n",y);
return 0;
}
////////////////////////////////////////////////////////
//此外,如果x为整数,自定义函数mypow还可以通过循环实现:
//方法3:自定义求x的y次方的函数
#include<stdio.h>
double mypow(int x, int y){
double z=1;
int i;
for(i=1; i<=y; i++)
z*=x;
return z;
}
//注:函数返回类型定义为double是为了能计算较大的数
int main(){
int x;
double y;
printf("x=");
scanf("%d",&x);
y=mypow(x,x);
printf("y=%.4lf\n",y);
return 0;
}

热心网友 时间:2022-06-19 17:14

这个开整型int,估计只能算到5^5=3235,到了6^6=46656>32767肯定报错
开长整long,估计只能算到10^10,到了11^11>2^15=2147483648也报错
肯定要用高精度计算高精度的乘法,我是懒得熬夜写这个,你们谁会写的写一下吧

热心网友 时间:2022-06-19 17:15

我会写。
本来想这个号上12000分就准备刀*入库马放南山金盆洗手的。
这个问题就作为我这个号最后回答的问题吧。

如果真有诚意可以采用我为最佳答案,然后我把程序用消息发给你。(程序短小精炼,比如可以求99的99次方等等)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... X的X次方的定义域是多少? x的x次方,怎么求导 x的x次方是什么函数 x的x次方的定义域是什么? x的x次方可以改写成什么 x的x次方当x趋近于0的极限怎么求 在线等 x的x次方到底是不是复合函数? 函数y=x的x次方,这种函数是怎么样的一个函数,具有一些什么性质,图像呢? 一直想问x的x次方如何求导? 极限问题:当x趋向于0时,x的x次方等于几? x的x次方是什么 手机qq空间封面商城怎么改默认 QQ空间手机版怎么修改封面 如何将腾讯手机QQ空间的封面设置成个人照片? 手机用高德地图导航要升级吗? 脚臭,而且老感觉黏黏的,该怎么办 为什么脚汗是粘的 脚出汗怎么办.. 洗脚时水粘粘的是怎么回事 冬天出脚汗多怎么回事 x的x 次方的导数是什么 X的X次方的导数怎么求 米卡尔之瞳的基本信息 神界传说的人物形象 烙饼的面醒一宿好吗 水库里的水抽出来放在大的塑料桶里用来烧开水或煮饭和菜能吃吗? 葱油饼可以提前一晚揉面吗? 做春饼头天晚上把面揉好醒一夜可以吗 塑料桶放水三十小时后吃有毒吗? 裤子的64A相当一尺几啊?还有60A? 中午烙饼的面能留到晚上再烙吗? 自来水放在硬塑料桶里沉淀两三天的水能喝吗?对身体有什么好处? 和好的面放了一夜能做烙饼吗 装涂料的塑料桶能装水煮饭吃吗 放鸡蛋活的面放一晚上还能烙饼吃了吗? 塑料桶烧开水可以吃吗? 塑料桶烧开的水泡海带能吃吗? 半身裙155/60a和155/64a有什么区别 头一天和的面,第二天烙饼可以吗 裤子上的155 62a 是什么意思