我回去编了下,晕了,昨天编到12点多,哎.
下面您看看,我分了三个模块,两块是函数。
主程序:
#include "stdio.h"
#include "conio.h"
#include "ceshi2.c"
#include "string.h"
int main()
{
short result[300]={0},end[300]={0},sum[300]={0},num[20]={0},i,j,len,q=0,k,m;
char str_num[21],ch;
gets(str_num);
k=strlen(str_num)-2;
for(i=2;i<k+2;num[i-2]=str_num[i++]-48);
for(j=k-1;j>=0;j--)
{
multi(result,j+1,num[j]);
len=3*(j+1)-1;
while(len>=0)
{
sprintf(&ch,"%d",result[len--]);
end[q++]=ch-48;
}
for(i=3*j+2;i>=0;i--)
{
sum[i]+=end[i];
if(sum[i]>9)
{
if(i>0)
{
sum[i-1]+=sum[i]/10;
if(i>1)
sum[i-2]+=sum[i+1]/10;
sum[i-1]%=10;
}
sum[i]%=10;
}
}
for(i=0;i<300;end[i]=0,result[i++]=0);
q=0;
}
for(i=299;!sum[i];i--);
printf("0.");
for(m=0;m<=i;m++)
printf("%d",sum[m]);
getch();
}
函数1:(保存成ceshi2.c)
#include "stdio.h"
#include "conio.h"
#include "ceshi.c"
#include "string.h"
void multi(short *result,short j,short num)
{
short sum[300]={0},i,m;
cal(j,sum);
for(i=299;!sum[i];i--);
for(m=0;m<=i;m++)
{
result[m]+=sum[m]*num;
result[m+1]+=result[m]/10;
result[m+2]+=result[m+1]/10;
result[m+1]%=10;
result[m]%=10;
}
}
函数2:(保存成ceshi.c)
#include "stdio.h"
#include "conio.h"
void pow125(short *a,short *result);
void cal(short time,short *result)
{
short a1[300]={5,2,1},i=0,k,a2[300]={0};
while(++i!=time)
{
if(i%2)
pow125(a1,a2);
else pow125(a2,a1);
}
if(time%2)
{
for(i=0;i<300;i++)
result[i]=a1[i];
}
else
{
for(i=0;i<300;i++)
result[i]=a2[i];
}
}
void pow125(short *a,short *result)
{
short i,j,k,num[3]={5,2,1};
for(k=299;!a[k];k--);
for(i=0;i<300;result[i++]=0);
for(i=0;i<3;i++)
for(j=0;j<=k;j++)
{
result[i+j]+=a[j]*num[i];
result[i+j+1]+=result[i+j]/10;
result[i+j]%=10;
}
}
以上三个程序要求保存在同一目录下.算法相当繁杂,我下个帖再写,先帖这三个上去,以免帖子太长.
对不礼貌的女生收钱......