C语言中的乘方算法

2024-12-29 12:23:01
推荐回答(4个)
回答1:

a^b, 把b分成整数部分跟不大于0.5的小数部分.
前者用多次乘法就可以解决, 后者用麦克劳林级数可以算
结果就可以算出来了

我没看错, 这个是能符合你要求的.

回答2:

int fang(int a,int b)//a是底数,b是指数即a^b;
{int i;int x=1;
if(a==0)return 0;//这里将0^0忽略了
if(b==0)return 1;
for(i=1;i<=b;i++){
x*=a;}//这是简单的写法,如果底数和指数太大还需要大整数乘法的算法。
return x;}

回答3:

楼主可以按照这个思路做
用递归实现

int function(int a)//a指数的次方
{
function(0)=1;
return (2*function(a-1));//我这里 的底数是2
}

回答4:

输入格式为:a.xxx空格b回车 就是前面的数中要带小数点的,如果是整数,就打a.0空格b回车。可以实现2.1的5000次方的操作
#include
#include
int qq(int n)
{ int i, sum=1;
for(i=1;i<=n;i++)
sum=10*sum;
return(sum);
}

int main()
{
float r;
int n;
while(1)
{
char a[10000];
long int b[10000];
int k,h,m,i,j,z,g,t,q,e;
long int c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='.')k=i;
m=i-k-1;
for(i=k;i a[i]=a[i+1];
h=i;
for(i=0;i b[i]=a[i]-48;
for(i=0;i for(i=0;i for(e=1;e {
for(i=0;i
for(j=0;j if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10; }
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}

h=h+g-1;
}
}

if(h {
printf(".");
for(j=m*n-1;j>h-1;j--)printf("0");
for(j=0; ;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);

}
if(h==m*n)
{ for(j=0; ;j++)if(b[j]!=0)break;
printf(".");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>m*n)
{
for(j=0; ;j++)if(b[j]!=0)break;
if(j {
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}

if(j<=m*n-1&&b[h-1]!=0)
{ for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=m*n)

{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
}
} printf("\n");

}
return 0;
}