求这段代码中的算法分析,看不明
这段代码是网上下的一个求常数e的代码,以字符输出,可以精确到几百几千甚至更多位
不过看了很久都没看懂怎么实现的,每句代码都懂,可不知道那些循环的作用是什么,
所以求高手分析下这段代码
#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; } }