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

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

sniper木木

2013.04.09

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:45%    等级:12

已帮助:4438人

方法1: 递归、循环、楼上的说的很详细了

方法2: 高精度+二分

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

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

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

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

#include

#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;

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值