真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

模擬大數據的基本計算,以解決常規(guī)計算器計算數據時位數的有限性-創(chuàng)新互聯(lián)

項目名稱 大數計算器

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網站建設公司。公司專注于為企業(yè)提供信息化建設解決方案。從事網站開發(fā),網站制作,網站設計,網站模板,微信公眾號開發(fā),軟件開發(fā),微信平臺小程序開發(fā),十余年建站對白烏魚等多個行業(yè),擁有豐富建站經驗。

*************************************************

大數計算的底層采用string對象存儲, 將整型數據轉換為字符型進行存儲運算的加減;采用逐位進行加減, 設計標記位, 標記進位與借位的方式;乘除在加減的基礎上控制循環(huán)的次數完成對數據的處理

#include
#include
#include
#include
using namespace std;
#define INT_64 long long
#define UN_INIT  0xcccccccccccccccc//不能分開
#define MIN_INT  0xffffffffffffffff
#define MAX_INT  (unsigned)0x7fffffffffffffff
class  BigData
{
public:
    BigData()
        :_data(0)
        , _pdata("")
    {}
    BigData(INT_64 data)
        :_data(data)
    {
        INT_64 tmp = _data;
        char cSymbol = '+';
        if (tmp<0)
        {
            tmp = 0 - tmp;
            cSymbol = '-';
        }
        _pdata.append(1, cSymbol);
        while (tmp)
        {
            _pdata.append(1, tmp % 10 + '0');
            tmp /= 10;
        }
        char* left = (char*)(_pdata.c_str() + 1);
        char* right = (char*)(_pdata.c_str() + _pdata.size() - 1);
        char temp;
        while (left < right)
        {
            temp = *left;
            *left++ = *right;
            *right-- = temp;
        }
        cout<<_data<<_pdata<= '0')
        {
            if (ret <= MAX_INT)
                ret = ret * 10 + *source-'0';
            _pdata.append(1, *source);
            source++;
        }
        if (*source = '-')
            ret = 0 - ret;
        _data = ret;
    }
    BigData(const BigData& bigData)
    {
        _data = bigData._data;
        _pdata = bigData._pdata;
    }
    BigData operator+(BigData& bigData)
    {
        if (!IsINT64OverFlow() && !bigData.IsINT64OverFlow())
        {
            if (_pdata[0] != bigData._pdata[0])
                return BigData(_data + bigData._data);
            else
            {
                if ('+' == _pdata[0] && MAX_INT - _data <= bigData._data || '-' == _pdata[0] && _data >= MIN_INT - bigData._data)
                    return  BigData(_data + bigData._data);
            }
        }
        return BigData(Add(_pdata, bigData._pdata).c_str());
    }
    BigData operator-(BigData& bigData)
    {
        if (!IsINT64OverFlow() && !bigData.IsINT64OverFlow())
        {
            if (_pdata[0] == bigData._pdata[0])
                return BigData(_data - bigData._data);
            else
            {
                if ('+' == _pdata[0] && _data <= MAX_INT + bigData._data || '-' == _pdata[0] && _data >= MIN_INT + bigData._data)
                    return  BigData(_data - bigData._data);
            }
        }
        string ret;
        if (_pdata[0] == bigData._pdata[0])
            ret = Sub(_pdata, bigData._pdata);
        else
        {
            ret = Add(_pdata, bigData._pdata);
            ret[0] = _pdata[0];
        }
        return BigData(ret.c_str());
    }
    BigData operator*(BigData& bigData)
    {
        if (!IsINT64OverFlow() && !bigData.IsINT64OverFlow())
        {
        	cout<<"pppp";
            if (_pdata[0] == bigData._pdata[0])
            {
                if ('+' == _pdata[0] && _data <= (MAX_INT / bigData._data )|| '-' == _pdata[0] && _data >= MAX_INT / bigData._data)
                {
				    cout<<(_data*bigData._data)<<"KKKKK";
					return  BigData(_data *bigData._data);
				    
				}
            }
            else
            {
                if ('+' == _pdata[0] && _data <= MIN_INT / bigData._data || '-' == _pdata[0] && _data >= MIN_INT / bigData._data)
                    return  BigData(_data * bigData._data);
            }
        }
       cout<<"KKKKKKKKll";
	    return BigData(Mul(_pdata, bigData._pdata).c_str());
    }
    BigData operator/(BigData& bigData)
    {
        if (_data == 0 || bigData._data == 0)
            return BigData((INT_64)0);
        if (!IsINT64OverFlow() && !bigData.IsINT64OverFlow())
        {
            return BigData(_data / bigData._data);
        }
        return  BigData(Div(_pdata, bigData._pdata).c_str());
    }
    friend  ostream& operator<<(ostream& out, const BigData& b)
    {
        out << b._pdata;
        return out;
    }
    friend  istream& operator>>(istream& in, BigData& b)
    {
        in >> b._pdata;
        return in;
    }
protected:
    bool  IsINT64OverFlow()
    {
        if (_data <= MAX_INT&&_data >= MIN_INT)
       {
       		cout<<"normal"<0)
                cSymbol = '-';
        }
        if (leftSize < rightSize)
        {
            swap(s1, s2);
            swap(leftSize, rightSize);
        }
        ret.resize(leftSize + 1);
        ret[0] = cSymbol;
        char cRes, cStep = 0;
        for (int idx = 1; idx < leftSize; ++idx)
        {
            cRes = s1[leftSize - idx] - '0' + cStep;
            if (idx 0)
        if (leftSize < rightSize || leftSize == rightSize &&strcmp(s1.c_str() + 1, s2.c_str() + 1) < 0)
        {
            swap(s1, s2);
            swap(leftSize, rightSize);
            if ('+' == cSymbol)
                cSymbol = '-';
            else
                cSymbol = '+';
        }
        string ret;
        ret.resize(leftSize);
        ret[0] = cSymbol;
        char cRet;
        for (int idx = 1; idx < leftSize; ++idx)
        {
            cRet = s1[leftSize - idx] - '0';
            if (idx < rightSize)
                cRet -= (s2[rightSize - idx] - '0');
 
            if (cRet < 0)
            {
                s1[leftSize - idx - 1] -= 1;
                cRet += 10;
            }
            ret[leftSize - idx] = cRet + '0';
        }
        return ret;
    }
    string Mul(string s1, string s2)
    {
        int leftSize = s1.size();
        int rightSize = s2.size();
        if (leftSize < rightSize)
        {
            swap(leftSize, rightSize);
            swap(s1, s2);
        }
        char cSymbol = '+';
        if (s1[0] != s2[0])
            cSymbol = '-';
        string ret;
        ret.resize(leftSize + rightSize - 1);
        memset((void*)ret.c_str(),'0',ret.size()*sizeof(char));
        ret[0] = cSymbol;
        int iDataLen = ret.size();
        int offSet = 0;
        for (int idx = 1; idx < rightSize; ++idx)
        {
            char cLeft = s2[rightSize - idx] - '0';
            char cStep = 0;
            if (cLeft == 0)
            {
                ++offSet;
                continue;
            }
            for (int iLdx = 1; iLdx < leftSize; ++iLdx)
            {
                char cRet = cLeft*(s1[leftSize - iLdx] - '0');
                cRet += (cStep + ret[iDataLen - iLdx - offSet] - '0');
                ret[iDataLen - iLdx - offSet] = cRet % 10 + '0';
                cStep = cRet / 10;
            }
            ret[iDataLen - offSet - leftSize] += cStep;
            ++offSet;
        }
        //cout<= 0 && rDataLen >= 0)
            {
                if (left[lDataLen] < right[rDataLen])
                {
                	if(lDataLen<1)
                    	break;
                    left[lDataLen - 1] -= 1;
                    left[lDataLen] += 10;
                }
                left[lDataLen] -= right[rDataLen];
                left[lDataLen]+='0';
                lDataLen--;
                rDataLen--;
            }
            cout<rSize || lSize == rSize&&strncmp(left, right, lSize) >= 0)
            return true;
        return false;
    }
private:
    INT_64 _data;
    string _pdata;
};
int main()
{
 //   BigData b1(102);
   // BigData b2(3);
    //BigData  b3= b1 /b2;
    //cout << b3 << endl;
    cout<<(123<=(signed)0x7fffffffffffffff)<

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網頁標題:模擬大數據的基本計算,以解決常規(guī)計算器計算數據時位數的有限性-創(chuàng)新互聯(lián)
URL網址:http://weahome.cn/article/dgjhdc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部