求这段代码中的算法分析,看不明,该如何处理
求这段代码中的算法分析,看不明
这段代码是网上下的一个求常数e的代码,以字符输出,可以精确到几百几千甚至更多位
不过看了很久都没看懂怎么实现的,每句代码都懂,可不知道那些循环的作用是什么,
所以求高手分析下这段代码
------解决方案--------------------
e=1/1!+1/2!+1/3!+1/4!+...+1/n!+..., n→∞
------解决方案--------------------
就是要计算正数的加法和除法
这段代码是网上下的一个求常数e的代码,以字符输出,可以精确到几百几千甚至更多位
不过看了很久都没看懂怎么实现的,每句代码都懂,可不知道那些循环的作用是什么,
所以求高手分析下这段代码
- C/C++ code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add(char *data,char *dataed,int bit);
void reciprocal(char *data,int bit,int num);
int main(void)
{
int bit;
char *data,*dataed;
int *rank;
printf("Input the bit: ");
scanf("%d",&bit);
rank=(int*)malloc(sizeof(int)*bit);
data=(char*)malloc(sizeof(char)*bit);
dataed=(char*)malloc(sizeof(char)*bit);
memset((void*)dataed,0,bit);
printf("Please wait...");
for (int i=0;i<bit;i++)
{
reciprocal(data,bit,i+1);
add(data,dataed,bit);
}
dataed[0]=dataed[0]+1;
printf("\nThe E is: ");
for (i=0;i<bit;i++)
{
if (i==1)
printf(".");
printf("%d",dataed[i]);
if (i+1%2000==0)
system("pause");
}
free(rank);
free(data);
free(dataed);
return 0;
}
void reciprocal(char *data,int bit,int num)
{
int quotient,remainder;
memset(data,0,bit);
*data=1;
for (int i=1;i<=num;i++)
{
remainder=0;
for (int k=0;k<bit;k++)
{
quotient=remainder*10+data[k];
remainder=quotient%i;
quotient=quotient/i;
data[k]=quotient;
}
}
}
void add(char* data,char* dataed,int bit)
{
int flag=0,b_flag;
for (int i=bit-1;i>=0;i--)
{
if (data[i]+dataed[i]+flag>=10)
b_flag=1;
else
b_flag=0;
dataed[i]=(dataed[i]+data[i]+flag)%10;
flag=b_flag;
}
}
------解决方案--------------------
e=1/1!+1/2!+1/3!+1/4!+...+1/n!+..., n→∞
------解决方案--------------------
就是要计算正数的加法和除法