首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-01 
求这段代码中的算法分析,看不明这段代码是网上下的一个求常数e的代码,以字符输出,可以精确到几百几千甚至

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

热点排行