• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            WaiTing編程之家

            WaiTing編程之家
            posts - 1, comments - 0, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            C++大數(shù)精度計(jì)算

            Posted on 2010-02-21 15:39 WaiTing 閱讀(2526) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++
            原文:http://www.x86pro.com/articleViewer.php?pid=160

            固定精度版本,即運(yùn)行時(shí)無法修改精度.

            頭文件:
            // WTNumber.h: interface for the CWTNumber class.
            //
            //////////////////////////////////////////////////////////////////////

            #if !defined(AFX_WTNUMBER_H__92E62B40_491A_4A75_AB89_FFB160DB2343__INCLUDED_)
            #define AFX_WTNUMBER_H__92E62B40_491A_4A75_AB89_FFB160DB2343__INCLUDED_

            #if _MSC_VER > 1000
            #pragma once
            #endif // _MSC_VER > 1000

            #define INT_BIT_MAX 255
            #define FLOAT_BIT_MAX 255

            class CWTNumber  
            {
            private:
                
            int intbits;                     /* 整數(shù)數(shù)位*/
                
            int floatbits;                   /* 小數(shù)有效數(shù)位*/
                
            char infinite;                   /* 無窮大*/
                
            char sign;                       /* 符號(hào)*/
                
            char intpart[INT_BIT_MAX];       /* 整數(shù)部分*/
                
            char floatpart[FLOAT_BIT_MAX];   /* 小數(shù)部分*/
            private:
                
            char* m_sz;
            public:
                
            /* 算術(shù)函數(shù)指針類型.*/
                typedef 
            void (*PFNCALC)(const CWTNumber&,const CWTNumber&,CWTNumber&);
                CWTNumber();
                CWTNumber(
            const char* szNum);
                
            ~CWTNumber();
                
            /* 轉(zhuǎn)換成字符串*/
                
            char* ToString();
                
            void FreeString();
                
            /* 初始化WTNumber為0.*/
                
            void InitWTNumberToZero();
                
            /* 判斷需要多少個(gè)字符空間存儲(chǔ)WTNumber轉(zhuǎn)換的字符串.*/
                
            int StrLenByWTNumber();
                
            /* 從字符串轉(zhuǎn)換到WTNumber.*/
                
            void StrToWTNumber(const char *arr);
                
            /* 從WTNumber轉(zhuǎn)換到字符串.*/
                
            void WTNumberToStr(char *szBuf);
                
            /* 調(diào)節(jié)數(shù)位,刪除最高整數(shù)位是0的和最低小數(shù)位是0的數(shù)位.*/
                
            void AdjustBits();
                
            /* 移動(dòng)小數(shù)點(diǎn),delta=0不移動(dòng),delta<0往左移動(dòng),delta>0往右移動(dòng).*/
                
            void MoveFloatPoint(int delta);
                
            /* 使無窮大 */
                
            void MakeInfinite();
                
            /* 比較2個(gè)數(shù)大小 */
                
            int WTCompare(const CWTNumber& n) const;
                
            /* 判斷是否為0 */
                
            int IsZero() const;
                
            /* 賦值號(hào)重載*/
                CWTNumber
            & operator=(const CWTNumber& n);

                
            /* 運(yùn)算符重載 */
                CWTNumber 
            operator+(const CWTNumber& n);
                CWTNumber 
            operator-(const CWTNumber& n);
                CWTNumber 
            operator*(const CWTNumber& n);
                CWTNumber 
            operator/(const CWTNumber& n);
                CWTNumber
            & operator+=(const CWTNumber& n);
                CWTNumber
            & operator-=(const CWTNumber& n);
                CWTNumber
            & operator*=(const CWTNumber& n);
                CWTNumber
            & operator/=(const CWTNumber& n);

                
            bool operator>(const CWTNumber& n);
                
            bool operator>=(const CWTNumber& n);
                
            bool operator<(const CWTNumber& n);
                
            bool operator<=(const CWTNumber& n);
                
            bool operator==(const CWTNumber& n);
                
            bool operator!=(const CWTNumber& n);
                
            /* 加法*/
                
            static void WTAdd(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res);
                
            /* 乘法*/
                
            static void WTMultiply(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res);
                
            /* 減法*/
                
            static void WTSubtract(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res);
                
            /* 除法*/
                
            static void WTDivide(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res);
                
            /* 根據(jù)算術(shù)函數(shù)返回結(jié)果 */
                
            static char *Result(const char *val1,const char *val2,PFNCALC pfnCalc);
            };


            #endif // !defined(AFX_WTNUMBER_H__92E62B40_491A_4A75_AB89_FFB160DB2343__INCLUDED_)

            源文件:
            // WTNumber.cpp: implementation of the CWTNumber class.
            //
            //////////////////////////////////////////////////////////////////////
            #include <string.h>
            #include 
            <stdlib.h>
            #include 
            "WTNumber.h"

            //////////////////////////////////////////////////////////////////////
            // Construction/Destruction
            //////////////////////////////////////////////////////////////////////

            CWTNumber::CWTNumber()
            {
                InitWTNumberToZero();
            }
            CWTNumber::CWTNumber(
            const char* szNum)
            {
                InitWTNumberToZero();
                StrToWTNumber(szNum);
            }
            CWTNumber::
            ~CWTNumber()
            {
                FreeString();
            }
            void CWTNumber::FreeString()
            {
                
            if(m_sz) delete []m_sz;
                m_sz
            =NULL;
            }
            void CWTNumber::InitWTNumberToZero()
            {
                memset(
            this,0,sizeof(CWTNumber));
            }
            int CWTNumber::StrLenByWTNumber()
            {
                
            int len = floatbits+intbits+1;
                
            if(intbits==0) len++;    /* .1 --> 0.1*/
                
            if(floatbits) len++;    /* '.'*/
                
            if(sign) len++;        /* '-'*/
                
            if(infinite) return 11;    /* #INFINITE */
                
            return len;
            }
            void CWTNumber::StrToWTNumber(const char *arr)
            {
                
            char *point;
                InitWTNumberToZero();
                
            if(*arr=='-')    /* 如果是負(fù)數(shù)*/
                {
                    arr
            ++;
                    sign
            =1;
                }
                point
            =strchr(arr,'.');
                
            if(point)    /* 找到小數(shù)點(diǎn) */
                {
                    
            int n=intbits=point-arr;    /* 計(jì)算出整數(shù)數(shù)位 */
                    
            while(n)    /* 整數(shù)數(shù)位不==0則循環(huán) */
                    {
                        intpart[intbits
            -n]=arr[n-1]-'0';    /* 將數(shù)字低位存在低下標(biāo)元素*/
                        n
            --;
                    }
                    
            while(*++point)
                    {
                        floatpart[floatbits]
            =*point-'0';
                        floatbits
            ++;
                    }
                }
                
            else    /* 說明沒寫小數(shù)點(diǎn),全是整數(shù).*/
                {
                    
            int n=intbits=strlen(arr);
                    
            while(n)
                    {
                        intpart[intbits
            -n]=arr[n-1]-'0';
                        n
            --;
                    }
                }
                AdjustBits();
                
            /* 處理-0 和0的情況*/
                
            if(floatbits==0)
                {
                    
            if(intbits==0 || intbits==1&&intpart[0]==0)
                        sign
            =0;
                }
            }

            void CWTNumber::WTNumberToStr(char *szBuf)
            {
                
            int n=intbits,c;
                memset(szBuf,
            0,StrLenByWTNumber());
                
            if(sign)    /* 如果是負(fù)數(shù)*/
                {
                    
            *szBuf++='-';
                }
                
            if(infinite) 
                {
                    strcat(szBuf,
            "#INFINITE");
                    
            return;
                }
                
            while(n)
                {
                    szBuf[intbits
            -n]=intpart[n-1]+'0';
                    n
            --;
                }
                c
            =0;    /* 是否加了0*/
                
            if(intbits==0) {
                    strcat(szBuf,
            "0");
                    c
            =1;
                }
                
            if(floatbits) strcat(szBuf,".");
                n
            =0;
                
            while(n<floatbits)
                {
                    szBuf[intbits
            +1+n+c]=floatpart[n]+'0';
                    n
            ++;
                }
            }
            void CWTNumber::AdjustBits()
            {
                
            while(intbits>1&&intpart[intbits-1]==0) intbits--;
                
            while(floatbits&&floatpart[floatbits-1]==0) floatbits--;
            }
            void CWTNumber::MoveFloatPoint(int delta)
            {
                
            /* delta<0則往左移動(dòng)小數(shù)點(diǎn),delta>0則向右移動(dòng)小數(shù)點(diǎn) */
                
            if(delta)
                {
                    CWTNumber n
            =*this;
                    InitWTNumberToZero();
                    sign
            =n.sign;
                    
            if(delta<0)
                    {
                        
            int i;
                        delta
            =-delta;
                        
            for(i=delta;i<n.intbits;i++)
                        {
                            intpart[intbits
            ++]=n.intpart[i];
                        }
                        
            for(i=delta-1;i>=0;i--)
                        {
                            floatpart[floatbits
            ++]=n.intpart[i];
                        }
                        
            for(i=0;i<n.floatbits;i++)
                        {
                            floatpart[floatbits
            ++]=n.floatpart[i];
                        }
                    }
                    
            else
                    {
                        
            int i;
                        
            for(i=delta;i<n.floatbits;i++)    /* 處理小數(shù)部分*/
                        {
                            floatpart[floatbits
            ++]=n.floatpart[i];
                        }
                        
            for(i=delta-1;i>=0;i--)    /* 小數(shù)到整數(shù)的部分*/
                        {
                            intpart[intbits
            ++]=n.floatpart[i];
                        }
                        
            for(i=0;i<n.intbits;i++)    /* 整數(shù)部分*/
                        {
                            intpart[intbits
            ++]=n.intpart[i];
                        }
                    }
                }
                AdjustBits();
            }
            void CWTNumber::MakeInfinite()
            {
                infinite
            =1;
            }

            int CWTNumber::WTCompare(const CWTNumber& n) const
            {
                
            /* 首先是比較符號(hào)*/
                
            if(sign==0&&n.sign!=0)    /* pn1是正數(shù),pn2是負(fù)數(shù)*/
                    
            return 1;    /* >*/
                
            else if(sign!=0&&n.sign==0)    /* pn1是負(fù)數(shù),pn2是正數(shù)*/
                    
            return -1;    /* <*/
                
            else    /* 同號(hào)狀態(tài)*/
                {
                    
            /* 比較整數(shù)部分*/
                    
            if(intbits>n.intbits)    /* pn1整數(shù)數(shù)位多*/
                        
            return sign?-1:1;
                    
            else if(intbits<n.intbits)
                        
            return sign?1:-1;
                    
            else    /* 整數(shù)數(shù)位相同*/
                    {
                        
            int i=intbits-1;    /*指到最高位*/
                        
            while(i>=0)
                        {
                            
            if(intpart[i]>n.intpart[i])
                                
            return sign?-1:1;
                            
            else if(intpart[i]<n.intpart[i])
                                
            return sign?1:-1;
                            
            else i--;
                        }
                        
            /* 整數(shù)部分相同,比較小數(shù)部分*/
                        
            for(i=0;i<floatbits&&i<n.floatbits;)
                        {
                            
            if(floatpart[i]>n.floatpart[i])
                                
            return sign?-1:1;
                            
            else if(floatpart[i]<n.floatpart[i])
                                
            return sign?1:-1;
                            
            else i++;
                        }
                        
            if(i<floatbits) return sign?-1:1;
                        
            if(i<n.floatbits) return sign?1:-1;
                        
            return 0;    /* 相等*/
                    }
                }
            }
            int CWTNumber::IsZero() const
            {
                
            if(floatbits==0&&intbits==0return 1;
                
            if(floatbits==0&&intbits==1&&intpart[0]==0return 1;
                
            return 0;
            }

            void CWTNumber::WTAdd(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res)
            {
                Res.InitWTNumberToZero();
                
            if(n1.sign^n2.sign)    /*異號(hào)*/
                {
                    CWTNumber rn2
            =n2;
                    rn2.sign
            =n1.sign;
                    WTSubtract(n1,rn2,Res);
                }
                
            else    /*同號(hào)*/
                {
                    
            int maxfloatbits=n1.floatbits>n2.floatbits?n1.floatbits:n2.floatbits;
                    
            int addbit=0;    /* 進(jìn)位值*/
                    
            int i,j;
                    
            for(i=maxfloatbits-1;i>=0;i--)
                    {
                        
            int value=n1.floatpart[i]+n2.floatpart[i]+addbit;
                        addbit
            =value/10;    /* 看看是否超過10. 設(shè)置進(jìn)位值*/
                        Res.floatpart[i]
            =value%10;
                    }
                    Res.floatbits
            =maxfloatbits;
                    
            /* 到此,小數(shù)部分計(jì)算完畢.*/
                    
            for(j=0;j<n1.intbits||j<n2.intbits;j++)
                    {
                        
            int value=n1.intpart[j]+n2.intpart[j]+addbit;
                        addbit
            =value/10;
                        Res.intpart[j]
            =value%10;
                        Res.intbits
            ++;
                    }
                    
            if(addbit>0)
                    {
                        Res.intpart[j]
            =addbit;
                        Res.intbits
            ++;
                    }
                    Res.sign
            =n1.sign;    /*決定符號(hào)*/
                    Res.AdjustBits();
                }
            }

            void CWTNumber::WTMultiply(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res)
            {
                CWTNumber z1
            =n1,z2=n2;
                CWTNumber sum;
                
            int i,j;
                sum.InitWTNumberToZero();
                Res.InitWTNumberToZero();
                z1.MoveFloatPoint(z1.floatbits);
                z2.MoveFloatPoint(z2.floatbits);
                
            /* 計(jì)算z1*z2 */
                
            for(i=0;i<z2.intbits;i++)
                {
                    CWTNumber tmp;    
            /* 存放臨時(shí)乘積*/
                    
            int addbit=0;
                    tmp.intbits
            =z1.intbits+i;
                    
            for(j=0;j<z1.intbits;j++)
                    {
                        
            int value = z2.intpart[i]*z1.intpart[j]+addbit;
                        addbit
            =value/10;
                        tmp.intpart[j
            +i]=value%10;
                    }
                    
            if(addbit)
                    {
                        tmp.intpart[j
            +i]=addbit;
                        tmp.intbits
            ++;
                    }
                    WTAdd(sum,tmp,Res);
                    sum
            =Res;
                }
                Res
            =sum;
                Res.MoveFloatPoint(
            -(n1.floatbits+n2.floatbits));
                
            /* 判斷符號(hào),異號(hào)為負(fù)*/
                
            if(n1.sign^n2.sign) Res.sign=1;
            }

            void CWTNumber::WTSubtract(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res)
            {
                Res.InitWTNumberToZero();
                
            if(n1.sign^n2.sign)    /* 異號(hào)情況*/
                {
                    CWTNumber rn2
            =n2;
                    rn2.sign
            =n1.sign;
                    WTAdd(n1,rn2,Res);
                }
                
            else    /* 同號(hào)情況*/
                {
                    
            int cmp=n1.WTCompare(n2);
                    
            int swapflag,i,maxfloatbits,subtractbit;
                    
            if(cmp==0return;    /* 相等就沒必要再減了.*/
                    swapflag
            =n1.sign==0?cmp==-1:cmp==1;
                    
            const CWTNumber* pn1=&n1;
                    
            const CWTNumber* pn2=&n2;
                    
            if(swapflag)
                    {
                        
            const CWTNumber *t=pn1;
                        pn1
            =pn2;
                        pn2
            =t;
                    }
                    maxfloatbits
            =pn1->floatbits>pn2->floatbits?pn1->floatbits:pn2->floatbits;
                    subtractbit
            =0;    /* 退位值*/
                    
            /* 先計(jì)算小數(shù)部分*/
                    
            for(i=maxfloatbits-1;i>=0;i--)
                    {
                        
            if(pn1->floatpart[i]-subtractbit<pn2->floatpart[i])
                        {
                            
            int value=pn1->floatpart[i]-pn2->floatpart[i]-subtractbit+10;
                            subtractbit
            =1;
                            Res.floatpart[i]
            =value;
                        }
                        
            else
                        {
                            
            int value=pn1->floatpart[i]-pn2->floatpart[i]-subtractbit;
                            subtractbit
            =0;
                            Res.floatpart[i]
            =value;
                        }
                    }
                    Res.floatbits
            =maxfloatbits;
                    
            /* 至此小數(shù)部分計(jì)算完畢.*/
                    
            for(i=0;i<pn1->intbits||i<pn2->intbits;i++)
                    {
                        
            if(pn1->intpart[i]-subtractbit<pn2->intpart[i])
                        {
                            
            int value=pn1->intpart[i]-pn2->intpart[i]-subtractbit+10;
                            subtractbit
            =1;
                            Res.intpart[i]
            =value;
                        }
                        
            else
                        {
                            
            int value=pn1->intpart[i]-pn2->intpart[i]-subtractbit;
                            subtractbit
            =0;
                            Res.intpart[i]
            =value;
                        }
                        Res.intbits
            ++;
                    }
                    Res.sign
            =swapflag?!n1.sign:n1.sign;    /*決定符號(hào)*/
                    Res.AdjustBits();
                }
            }
            void CWTNumber::WTDivide(const CWTNumber& n1,const CWTNumber& n2,CWTNumber& Res)
            {
                CWTNumber z1
            =n1,z2=n2;
                
            int deta=z2.floatbits-z1.floatbits;
                z1.MoveFloatPoint(z1.floatbits);
                z2.MoveFloatPoint(z2.floatbits);
                Res.InitWTNumberToZero();
                
            if(n1.IsZero()) return ;
                
            if(n2.IsZero()) {
                    Res.sign
            =n1.sign;
                    Res.MakeInfinite();
                    
            return ;
                }
                z1.sign
            =z2.sign=0;                /*統(tǒng)一符號(hào),便于比較大小*/ 
                
            while(z1.intbits!=z2.intbits) {    /*確保數(shù)位相等,這步耗費(fèi)很多時(shí)間*/
                    
            if(z1.intbits<z2.intbits) {
                        z1.MoveFloatPoint(
            1);
                        deta
            --;
                    } 
            else {
                        z2.MoveFloatPoint(
            1);
                        deta
            ++;
                    }
                }
                
            while(Res.floatbits<(INT_BIT_MAX/2)) {
                    
            int cmp=z1.WTCompare(z2);
                    
            int n=10;
                    CWTNumber mulres,subres;
                    
            if(cmp==-1) {      /*z1<z2*/
                        z1.MoveFloatPoint(
            1);
                        Res.floatpart[Res.floatbits
            ++]=0;
                        
            continue;
                    } 
            else if(cmp==0) { /*z1==z2*/
                        Res.floatpart[Res.floatbits
            ++]=1;
                        
            break;
                    }
                    
            do {    /*找商*/
                        CWTNumber tmp;
                        tmp.intpart[
            0]=--n;
                        tmp.intbits
            =1;
                        WTMultiply(z2,tmp,mulres);
                    } 
            while((cmp=mulres.WTCompare(z1))==1);
                    Res.floatpart[Res.floatbits
            ++]=n;
                    
            if(cmp==0break;
                    WTSubtract(z1,mulres,subres);
                    subres.MoveFloatPoint(
            1);
                    z1
            =subres;
                }
                Res.MoveFloatPoint(
            1);
                Res.MoveFloatPoint(deta);
                
            /* 判斷符號(hào),異號(hào)為負(fù)*/
                
            if(n1.sign^n2.sign) Res.sign=1;
            }
            char *CWTNumber::Result(const char *val1,const char *val2,PFNCALC pfnCalc)
            {
                CWTNumber n1,n2,res;
                n1.StrToWTNumber(val1);
                n2.StrToWTNumber(val2);
                pfnCalc(n1,n2,res);
                
            return res.ToString();
            }

            char* CWTNumber::ToString()
            {
                FreeString();
                m_sz
            =new char[StrLenByWTNumber()];
                WTNumberToStr(m_sz);
                
            return m_sz;
            }

            CWTNumber
            & CWTNumber::operator=(const CWTNumber& n)
            {
                
            if(this!=&n) {
                    FreeString();
                    memcpy(
            this,&n,sizeof(CWTNumber));
                    
            if(n.m_sz)
                    {
                        m_sz
            =strdup(n.m_sz);
                    }
                }
                
            return *this;
            }


            CWTNumber CWTNumber::
            operator+(const CWTNumber& n)
            {
                CWTNumber res;
                CWTNumber::WTAdd(
            *this,n,res);
                
            return res;
            }
            CWTNumber CWTNumber::
            operator-(const CWTNumber& n)
            {
                CWTNumber res;
                CWTNumber::WTSubtract(
            *this,n,res);
                
            return res;
            }
            CWTNumber CWTNumber::
            operator*(const CWTNumber& n)
            {
                CWTNumber res;
                CWTNumber::WTMultiply(
            *this,n,res);
                
            return res;
            }
            CWTNumber CWTNumber::
            operator/(const CWTNumber& n)
            {
                CWTNumber res;
                CWTNumber::WTDivide(
            *this,n,res);
                
            return res;
            }
            CWTNumber
            & CWTNumber::operator+=(const CWTNumber& n)
            {
                CWTNumber n1
            =*this,n2=n;
                CWTNumber::WTAdd(n1,n2,
            *this);
                
            return *this;
            }
            CWTNumber
            & CWTNumber::operator-=(const CWTNumber& n)
            {
                CWTNumber n1
            =*this,n2=n;
                CWTNumber::WTSubtract(n1,n2,
            *this);
                
            return *this;
            }
            CWTNumber
            & CWTNumber::operator*=(const CWTNumber& n)
            {
                CWTNumber n1
            =*this,n2=n;
                CWTNumber::WTMultiply(n1,n2,
            *this);
                
            return *this;
            }
            CWTNumber
            & CWTNumber::operator/=(const CWTNumber& n)
            {
                CWTNumber n1
            =*this,n2=n;
                CWTNumber::WTDivide(n1,n2,
            *this);
                
            return *this;
            }
            bool CWTNumber::operator>(const CWTNumber& n)
            {
                
            return WTCompare(n)==1;
            }
            bool CWTNumber::operator>=(const CWTNumber& n)
            {
                
            return WTCompare(n)!=-1;
            }
            bool CWTNumber::operator<(const CWTNumber& n)
            {
                
            return WTCompare(n)==-1;
            }
            bool CWTNumber::operator<=(const CWTNumber& n)
            {
                
            return WTCompare(n)!=1;
            }
            bool CWTNumber::operator==(const CWTNumber& n)
            {
                
            return WTCompare(n)==0;
            }
            bool CWTNumber::operator!=(const CWTNumber& n)
            {
                
            return WTCompare(n)!=0;
            }

            使用演示:
            #include <stdio.h>
            #include 
            "WTNumber.h"

            int main()
            {
                
            char sz1[256]="";
                
            char sz2[256]="";
                puts(
            "請(qǐng)輸入兩個(gè)數(shù)字:");
                
            while(scanf("%s%s",sz1,sz2)!=-1)
                {
                    CWTNumber n1(sz1),n2(sz2);
                    printf(
            "兩數(shù)相加結(jié)果:\n%s\n",(n1+n2).ToString());
                    printf(
            "兩數(shù)相減結(jié)果:\n%s\n",(n1-n2).ToString());
                    printf(
            "兩數(shù)相乘結(jié)果:\n%s\n",(n1*n2).ToString());
                    printf(
            "兩數(shù)相除結(jié)果:\n%s\n",(n1/n2).ToString());
                    puts(
            "請(qǐng)輸入兩個(gè)數(shù)字:");
                }
                
            return 0;
            }

            運(yùn)行結(jié)果:
            請(qǐng)輸入兩個(gè)數(shù)字:
            13 7
            兩數(shù)相加結(jié)果:
            20
            兩數(shù)相減結(jié)果:
            6
            兩數(shù)相乘結(jié)果:
            91
            兩數(shù)相除結(jié)果:
            1.85714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲国产成人久久综合野外| 精品久久久久久国产牛牛app| 人妻精品久久无码专区精东影业| 色88久久久久高潮综合影院| 激情伊人五月天久久综合| 99久久免费只有精品国产| 亚洲欧美国产日韩综合久久| 婷婷综合久久中文字幕蜜桃三电影 | 久久综合噜噜激激的五月天| 狠狠色丁香久久婷婷综合五月 | 久久精品国产一区| 久久一区二区三区99| 久久精品国产亚洲av麻豆小说 | 国产精品久久新婚兰兰| 99久久免费国产特黄| 久久久久亚洲AV成人网| 亚洲AV无码成人网站久久精品大| 久久福利青草精品资源站免费| 久久天天躁狠狠躁夜夜av浪潮 | 国产精品成人99久久久久| 亚洲香蕉网久久综合影视| 狠狠色综合久久久久尤物| 亚洲精品无码久久久久久| 久久无码一区二区三区少妇| 久久99精品久久久久久久不卡| 久久亚洲国产精品五月天婷| 国产精品免费福利久久| 欧美日韩精品久久久免费观看| 久久综合久久综合久久| 亚洲中文字幕无码一久久区| 久久男人中文字幕资源站| 伊人久久大香线蕉影院95| 日韩精品久久久久久免费| 久久笫一福利免费导航 | 欧美激情精品久久久久久| 国产精品国色综合久久| 欧美亚洲国产精品久久| 噜噜噜色噜噜噜久久| 久久久久99精品成人片三人毛片 | 久久久精品人妻一区二区三区四| 亚洲人成电影网站久久|