程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言中的乘方算法

C語言中的乘方算法

編輯:C語言問答

C語言中的乘方算法

不是用math自帶的pow,那個精度不夠,只是想知道求乘方的算法,哪位大俠幫幫忙,謝過了,如果編譯通過,財富20,不食言

最佳回答:

輸入格式為:a.xxx空格b回車 就是前面的數中要帶小數點的,如果是整數,就打a.0空格b回車。可以實現2.1的5000次方的操作
#include<stdio.h>
#include<math.h>
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<k+m;i++)
a[i]=a[i+1];
h=i;
for(i=0;i<h;i++)
b[i]=a[i]-48;
for(i=0;i<h;i++)c=c*10+b[i];
for(i=0;i<h/2;i++){ t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}
for(e=1;e<n;e++)
{
for(i=0;i<h;i++)b[i]=b[i]*c;


for(j=0;j<h-1;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<m*n)
{
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<m*n-1&&b[h-1]==0)
{
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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved