資源描述:
《精確e的小數(shù)點后位數(shù)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、題目:精確e的小數(shù)點后位數(shù)(位數(shù)大于5000)題目:精確e的小數(shù)點后位數(shù)。(位數(shù)大于5000位)。程序代碼://#include該頭文件與String頭文件功能大致相同,均為字符串模板類,可以定義字符串指針char*。//#include該頭文件包含,即模板類中使用的assert函數(shù),功能是可以在出錯的時候指出。//#include該頭文件包含輸入輸出流。//程序設(shè)計思路:e=1+1+1/2!+1/3!+1/4!+.....+1/n!(這是估算自然常熟e的公式)。//intlength:希望計算的長度,例如5000為
2、希望計算到小數(shù)點后五千位。//char*result:結(jié)果存儲,需要預(yù)先分配空間。本程序采用十六進(jìn)制,即本程序中數(shù)字0-9存儲為0x00-0x09。//程序優(yōu)越性較強:可以在一秒以內(nèi)計算到小數(shù)點后10000位。#include#include#includeusingnamespacestd;voidcalculateE(intlength,int*result)//這是一個模板類的定義。{int*tmp;int*lastTmp;int*tempResult[2];//分配兩個空間,存放的是指針。assert(result);//如果程
3、序遇到錯誤,將返回提示信息。tempResult[0]=newint[length];tempResult[1]=newint[length];tmp=tempResult[0];lastTmp=tempResult[1];inttmpIndex=0;memset(lastTmp,0,length*sizeof(int));//該函數(shù)的功能就是把lastTmp所指的一段數(shù)組空間清0。lastTmp[0]=1;for(intcal=2;cal<=length;++cal){memset(tmp,0,length*sizeof(int));intfirstNoZero=0;staticintdi
4、v=1;for(;div<=cal;++div){intquo=0;intrem=0;for(intj=0;j=firstNoZero-1;--i){intt
5、mp_sum=tmp[i]+result[i]+flag;flag=(tmp_sum>=10?1:0);result[i]=(flag?tmp_sum-10:tmp_sum);//flag如果大于10,則減去10再賦值。否則,直接賦值。}//估算到小數(shù)點后length位的算法。lastTmp=tmp;tmpIndex=(tmpIndex?0:1);tmp=tempResult[tmpIndex];}delete[]tempResult[0];delete[]tempResult[1];result[0]+=2;//result[0]存放最終結(jié)果。}intmain(){intn;cout<<"
6、pleaseinputyouwantedprecision(輸入你想計算的精確度,即為length賦值):";//請輸入你想計算的精確度,即小數(shù)點后的位數(shù)。cin>>n;cout<<"thenewlinefollowedby50number";//以每行50個數(shù)輸出結(jié)果。int*result=newint[n+1];memset(result,0,(n+1)*sizeof(int));calculateE(n,result);//調(diào)用calculateE。cout<<"2.";for(inti=0;i7、ut<<'';//每輸出5個數(shù)就輸出一個空格。if((i+1)%50==0)cout<