求这段代码中的算法分析,看不明,该如何处理

求这段代码中的算法分析,看不明
这段代码是网上下的一个求常数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→∞
------解决方案--------------------
就是要计算正数的加法和除法