欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

c++小項目大數(shù)四則運算(整數(shù))-創(chuàng)新互聯(lián)

代碼如下:
#pragma once
#include<iostream>
#include<assert.h>
#include<string>
using namespace std;

#define UN_INIT 0XCCCCCCCCCCCCCCCC;
#define MAX 0x7FFFFFFFFFFFFFFF
#define MIN 0X8000000000000000
typedef long long  INT64;

class BigData
{
public:
 BigData(INT64 value=0xCCCCCCCCCCCCCCCC) :_value(value)
 {
  ToString();
 };
 BigData(const char *p);
 BigData operator+(BigData & bigdata);
 BigData operator-(BigData & bigdata);
 BigData operator*(BigData & bigdata);
 BigData operator/(BigData & bigdata);

 friend ostream& operator <<(ostream & _cout, const BigData& bigdata);
private:
 bool IsOver64()const
 {
  string tmp("+9223372036854775807");
   if (_StrData[0] == '-')
  {
   tmp = "-9223372036854775808";
  }
  if (_StrData.size() < tmp.size())
   return true;
  else if (_StrData.size() == tmp.size() && _StrData <= tmp)
   return true;
  return false;
 }
 string Add(string left, string right);
 string Sub(string left, string right);
 string Mul(string left, string right);
 string Div(string left, string right);


private:
 bool IsLeftBig(const char *left, int lSize, const char *right, int rSize);
 char SubLoop( char *left, int lSize, const char *right, int rSize);
 void ToString();
 INT64 _value;
 string _StrData;
};
BigData::BigData(const char *pData)
{
 //1212312   asdasd     1221312qwe     0000qweqwe
 if (pData == NULL)
  return;
 char *p =(char *) pData;
 char _Symble = pData[0];
 if (_Symble == '+'||_Symble == '-')
 {
  p++;
 }
 else if (_Symble >= '0' && _Symble <= '9')
 {
  _Symble = '+';
 }
 else _Symble = '-';
 while (*p == '0')
 {
  p++;
 }
 _StrData.resize(strlen(pData) + 1);
 _StrData[0] = _Symble;
 int count = 1;
  _value = 0;
 while (*p>='0'&&*p<='9')
 {
  _value = _value*10 + (*p-'0');
  _StrData[count++] = *p;
  p++;
 }
 if (_Symble == '-')
  _value = 0 - _value;
 _StrData.resize(count);
};
 ostream&  operator<<(ostream & _cout, const BigData& bigdata)
{
  //是否溢出判斷
  //
  if (bigdata.IsOver64())
  {
   _cout << bigdata._value << endl;
  }
  else _cout << bigdata._StrData << endl;
  return _cout;

}
void BigData::ToString()
{
 INT64 temp=_value;//1111111111111111
 if (_value > 0)
  _StrData.append(1, '+');
 else
 {
  
  _StrData.append(1, '-');
 }
 if (_value < 0)
  temp = 0 - _value;
 while (temp)
 {
  char cStr = temp % 10 + '0';
  _StrData.append(1, cStr);
  temp /= 10;
 }
 int left = 1; int right = _StrData.size()-1;
 while (left < right)
 {
  swap(_StrData[left], _StrData[right]);
  ++left;
  --right;

 }

}
bool BigData::IsLeftBig(const char *left, int lSize, const char *right, int rSize)
{
 if (lSize > rSize || lSize == rSize&&strcmp(left, right) >=0)
 {
  return true;
 }
 return false;
}

char BigData::SubLoop( char *left, int lSize, const char *right, int rSize)
{
 char Cret = '0';
 while (true)
 {
  if (!IsLeftBig(left, lSize, right, rSize))//如果左邊小
  {
   break;
  }
  else//循環(huán)相減法
  {
   int lsize = lSize - 1;
   int rsize = rSize - 1;
   while (lsize>=0&&rsize>=0)
   {
    char ret = left[lsize] - '0';
    ret -= right[rsize] - '0';
    if (ret < 0)
    {
     left[lsize-1] -= 1;
     ret += 10;
    }
    left[lsize] = ret + '0';
    lsize--;
    rsize--;
   }
   while (*left == '0'&&lSize>0)
   {
    left++;
    lSize--;
   }
   Cret++;
  }
 }
 return Cret;
}



BigData BigData::operator +(BigData & bigdata)
{
 if (IsOver64() && bigdata.IsOver64())//都不溢出
 {
  if (_StrData[0] != bigdata._StrData[0])
  {
   return BigData(_value + bigdata._value);
  }
  INT64 tmp = MIN - _value;
  if ((_value > 0 && (MAX - _value >= bigdata._value)) || (_value < 0 && (tmp <= bigdata._value)))
  {
   return BigData(_value + bigdata._value);
  }
 }
 //至少有一個溢出
 //結果溢出
 if (_StrData[0] == bigdata._StrData[0])
  return BigData(Add(_StrData, bigdata._StrData).c_str());
 else return BigData(Sub(_StrData, bigdata._StrData).c_str());//符號位相反 取反。


}
string BigData::Add(string left, string right)//
{

 int iLeft = left.size();
 int iRight = right.size(); 
 string ret;
 
 ret.append(1, left[0]);
 if (left[0] != right[0])
 {
  if (left[0] == '-')
   ret[0] = '+';
  if (right[0] == '+')
   ret[0] = '-';


 }
 if (iLeft < iRight)
 {
  swap(left, right);
  swap(iLeft, iRight);
 }
 ret.resize(iLeft + 1);

 char step = 0;
 for (int index = 1; index < iLeft; ++index)
 {
  char Cstr = left[iLeft - index] - '0' + step;
  if (index < iRight)
  {
   Cstr += (right[iRight - index] - '0');
  }

  ret[iLeft - index + 1] = Cstr % 10 + '0';
  step = Cstr / 10;
 }
 ret[1] = step + '0';
 return ret;
}

BigData BigData::operator -(BigData & bigdata)
{
 if (IsOver64() && bigdata.IsOver64())//兩個不溢出
 {
  if (_StrData[0] == bigdata._StrData[0])
  {
   return BigData(_value - bigdata._value);
  }
  else
  {//10 -1  11   -11 1  -12
   if ((_value>0 || (_value<0) && MIN + bigdata._value <= _value))
    return BigData(_value - bigdata._value);
  }
 }
  if (_StrData[0] != bigdata._StrData[0])
  {
   //bigdata._StrData[0] = _StrData[0];
   return BigData(Add(_StrData, bigdata._StrData).c_str());
  }

  else
  {
   
   return BigData(Sub(_StrData, bigdata._StrData).c_str());//符號位相同
  }
 


}

string BigData::Sub(string left, string right)
{
 //if (left[0]==right[])
 int iLeft = left.size();
 int iRight = right.size();
 string ret;
 char symble = left[0];

 if (iLeft < iRight || (iLeft == iRight&&left<right))//左邊的xiao
 {
  swap(left, right);
  swap(iLeft, iRight);
  if (symble == '+')
   symble = '-';
  else
  {
   symble = '+';

  }
 }
 ret.resize(iLeft);

 ret[0] = symble;
 char step = 0;
 for (int index = 1; index < iLeft; ++index)
 {
  char Cstr = left[iLeft - index] - '0';
  if (index < iRight)
  {
   Cstr -= (right[iRight - index] - '0');
  }
  if (Cstr < 0)
  {
   left[iLeft - index - 1] -= 1;
   Cstr += 10;



  }
  ret[iLeft - index] = Cstr + '0';

 }

 return ret;
}

BigData BigData::operator *(BigData & bigdata)
{
 //
 if (IsOver64() && bigdata.IsOver64())
 {
  if (_StrData[0] == bigdata._StrData[0])//-10   -2    5
  {
   if ((_value > 0 && MAX / _value >= bigdata._value) || (_value < 0 && (MAX / _value <= bigdata._value)))
    return BigData(_value*bigdata._value);
  }
  else
  {
   if ((_value > 0 && MIN / _value >= bigdata._value) || (_value < 0 && (MIN / _value >= bigdata._value)))
    return BigData(_value*bigdata._value);
  }
 }

 return BigData(Mul(_StrData, bigdata._StrData).c_str());
}

string BigData::Mul(string left, string right)
{
 char symbol = '+';
 if (left[0] != right[0])
   symbol = '-';
 int iLeft = left.size();
 int iRight = right.size();
 if (iLeft > iRight)
 {
  swap(left, right);
  swap(iLeft, iRight);
 }
 string ret;
 //ret.resize(iLeft + iRight - 1);
 ret.assign(iLeft + iRight -1, '0');
 ret[0] = symbol;
 int ioffset = 0;
 int rlen = ret.size();
 for (int index = 1; index < iLeft; ++index)
 {
  char Cleft = left[iLeft - index] - '0';
  char step = 0;
  if (Cleft == '0')
  {
   ++ioffset;
   continue;
  }
  for (int index = 1; index < iRight; ++index)
  {
   char Cstr = Cleft*(right[iRight - index] - '0') + step;//取到字符
   Cstr += (ret[rlen - index - ioffset] - '0');//累加
   ret[rlen - index - ioffset] = (((Cstr) % 10)+'0' );
   step = Cstr / 10;
  }
  ret[rlen - iRight - ioffset] += step;
  ioffset++;
 }
 return ret;
}
BigData BigData::operator /(BigData & bigdata)
{
 assert(bigdata._value != 0);
 if (IsOver64() && bigdata.IsOver64())//不溢出
 {
  return BigData(_value / bigdata._value);
 }
 if (_StrData.size() < bigdata._StrData.size() || (_StrData.size() == bigdata._StrData.size()&&strcmp(_StrData.c_str() + 1, bigdata._StrData.c_str() + 1) < 0))
 {
  return BigData(INT64(0));
 }
 if (bigdata._StrData == "+1" || bigdata._StrData == "-1")
 {
  if (_StrData[0] != bigdata._StrData[0])
  {
   _StrData[0] = '-';
  }
  else _StrData[0] = '+';
  return *this;
 
 }
 if (strcmp(_StrData.c_str() + 1, bigdata._StrData.c_str() + 1) == 0)
 {
  if (_StrData[0] != bigdata._StrData[0])
  {
   return BigData(INT64(1));
  }
  else return BigData(INT64(-1));
 }
 return BigData(Div(_StrData, bigdata._StrData).c_str());
}
string BigData::Div(string left, string right)
{
 string ret;
 ret.append(1, '+');
 if (left[0] != right[0])
 {
  ret[0] = '-';
 }
 int LSize = left.size() - 1;
 int Rsize= right.size() - 1;
 char *Left = (char *)left.c_str() + 1;
 char *Right = (char *)right.c_str() + 1;
 int datalen = Rsize;
 for (int index = 0; index < LSize;)
 {
  if (!IsLeftBig(Left, datalen, Right, Rsize))//左邊小于右邊
  {
   ret.append(1, '0');
   datalen++;
   if (datalen + index>LSize)
    break;
  }
  else
  {
   ret.append(1, SubLoop(Left, datalen, Right, Rsize));
   while (*Left == '0'&&datalen > 0)
   {
    Left++;
    index++;
    datalen--;
   }
   datalen++;
   if (index + datalen > LSize)
    break;

  }
 }
 return ret;

}



測試用例如下:
oid testAdd()
{
                 BigData b1("-45353" );
                 BigData b2("37353753" );
                 BigData b3("-9223372036854775808" );
                 BigData b4("9223372036854775800" );
                 BigData b5("-9223372036854775810" );
                 BigData b6("9223372036854775900" );

                 //1、都在INT64范圍內<運算后在范圍內,運算后不在范圍內>(再進行構造可以解決)
                cout << (b1 + b1) << endl;
                cout << (b2 + b2) << endl;
                cout << (b1 + b2) << endl;
                cout << (b1 + b4) << endl;

                cout << b3 << endl;
                cout << (b1 + b3) << endl;
                cout << (b2 + b4) << endl;

                 //2、都不在INT64范圍內<運算后在范圍內,運算后不在范圍內>


                cout << (b2 + b5) << endl;
                cout << (b1 + b6) << endl;
                cout << (b6 + b1) << endl;

                 //3、一個在一個不在<運算后在范圍內,運算后不在范圍內>
                cout << endl;
                cout << endl;
                cout << endl;
                cout << endl;




}

void testSub()
{
                 BigData b1("-45353" );
                 BigData b2("37353753" );
                 BigData b3("-9223372036854775808" );
                 BigData b4("9223372036854775800" );
                 BigData b5("-9223372036854775810" );
                 BigData b6("9223372036854775900" );
                 //1、都在INT64范圍內<運算后在范圍內,運算后不在范圍內>(再進行構造可以解決)
                cout << (b1 - b2) << endl;
                cout << (b2 - b1) << endl;
                cout << (b3 - b1) << endl;
                cout << (b1 - b4) << endl;
                cout << (b3 - b2) << endl;
                cout << (b4 - b1) << endl;
                cout << (b1 - b3) << endl;
                cout << (b2 - b4) << endl;
                cout << endl;

                 //2、一個在一個不在<運算后在范圍內,運算后不在范圍內>


                cout << (b5 - b1) << endl;
                cout << (b1 - b5) << endl;
                cout << endl;
                cout << (b6 - b2) << endl;
                cout << (b2 - b6) << endl;
                cout << endl;
                cout << (b6 - b5) << endl;
                cout << (b5 - b6) << endl;
                cout << (b2 - b5) << endl;
                cout << (b1 - b6) << endl;
                cout << (b6 - b1) << endl;

}

void test()
{
                 BigData c1("999" );
                 BigData c2("222222222222222222222222222" );
                cout<< c1*c2<<endl;

}

void testMul()
{
                 BigData b1("-45353" );
                 BigData b2("37353753" );
                 BigData b3("-9223372036854775808" );
                 BigData b4("9223372036854775800" );
                 BigData b5("-9223372036854775810" );
                 BigData b6("9223372036854775900" );
                 //1、都在INT64范圍內<運算后在范圍內,運算后不在范圍內>(再進行構造可以解決)
                cout << ( BigData("999" ) * BigData( "22222222222222222222222222222" )) << endl;

                cout << (b2 * b1) << endl;
                cout << (b1 * b2) << endl;
                cout << (b1 * BigData("0" )) << endl;
                cout << ( BigData("0" ) * b2) << endl;
                cout << endl;
                cout << (b3 * b1) << endl;
                cout << (b1 * b3) << endl;
                cout << (b1 * b4) << endl;   //  錯誤
                cout << (b4 * b1) << endl;   // 正確
                cout << (b3 * b2) << endl;   //  錯誤
                cout << (b2 * b4) << endl;   // 正確
                cout << endl;

                 //2、一個在一個不在<運算后在范圍內,運算后不在范圍內>

                cout << ( BigData("0" ) * b6) << endl;
                cout << (b5 * BigData("0" )) << endl;
                cout << (b5 * b1) << endl;
                cout << (b1* b5) << endl;
                cout << endl;
                cout << (b6 * b2) << endl;
                cout << (b2 * b6) << endl;
                cout << endl;
                cout << (b6 * b5) << endl;
                cout << (b5 * b6) << endl;
                cout << (b2 * b5) << endl;
                cout << endl;
                cout << (b1 * b6) << endl;
                cout << (b6 * b1) << endl;

}


void testDiv()
{
                 BigData b1("-45353" );
                 BigData b2("37353753" );
                 BigData b3("-9223372036854775808" );
                 BigData b4("9223372036854775800" );
                 BigData b5("-9223372036854775810" );
                 BigData b6("9223372036854775900" );

                 //1、排除除數(shù)為0
                 //cout << (b1 / BigData(0)) << endl;

                 //2、在范圍內

                cout << (b1 / b2) << endl;
                cout << (b2 / b1) << endl;


                 //3、不在范圍內<左(被除數(shù))比右(除數(shù))小為0,左比右大>
                cout << (b2 / b5) << endl;
                cout << (b2 / b6) << endl;

                cout << (b5 / b2) << endl;
                cout << (b6 / b2) << endl;
                cout << (b6 / b1) << endl;
                cout << (b5 / b1) << endl;
                 BigData b7("-1231123203367738338252" );
                cout << b7 / b1 << endl;
}



int main()
{
                 //testMul();
                 //testAdd();
                 //testSub();
                 //testMul();
                 //test();
                 //BigData(10);
                testDiv();
                 //BigData b1("2222222222222222222222222");
                 //BigData b2("33");
                 //cout << b1 / b2 << endl;


                 return 0;
}

c++ 小項目  大數(shù)四則運算(整數(shù))

創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務克拉瑪依,十余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

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

本文題目:c++小項目大數(shù)四則運算(整數(shù))-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://aaarwkj.com/article38/codpsp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、移動網(wǎng)站建設、品牌網(wǎng)站設計網(wǎng)頁設計公司、域名注冊、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
欧美综合亚洲韩精品区| 日韩国产在线一区二区| 自拍一区日韩二区欧美三区| 日本久久在线观看视频| 年轻的少妇一区二区三区| 久久国产精品欧美熟妇| 色综合色综合蘑菇在线| 欧美日韩男女性生活视频| 嫩草网站国产精品一区二| 啊啊啊用力好大视频| 精品乱码一区二区三区四区| 成人激情视频在线网页| 亚洲免费黄色大片网站| 精品熟女少妇av免费观看| 有码国内精品人妻少妇| 国产国语久久91老女人| 亚洲国产午夜福利在线69| 日本色网一区二区三区四区| 一区二区三区四区四虎| 久久最新最热视频精品| 国产精品亚洲二区三区三州| 国产欧美色日韩综合在线| 亚洲熟女精品不卡一区二区| 国产熟女av一区二区| av黄色资源在线观看| 欧美高清视频免费播放| 男人午夜激情免费网站| 国产亚洲精品久久久闺蜜| 伊人青草免费在线视频| 国产精品白丝一区二区三区| 国产精品国产三级专区| 激情小说婷婷亚洲综合| 日本乱一区二区三区在线| 日日淫夜夜操熟女视频| 夜夜嗨精品免费视频播放| 黄色18禁网站在线看| 久久久亚洲熟妇熟女一区二区| 日日骚国产欧美一区二区| 国产剧情av网址观看免费| 日韩精品专区中文字幕| 日韩免费中文视频不卡|