雖然以前自己就學習過,但是自己打出來的**目測效率不高,也不夠精簡
因此學習一下eden裡面的這一題:big integer add&subtract
#ifndef _big_integer_
#define _big_integer_
#include #include using std::string;
using std::ostream;
// forward declaration
class biginteger;
// operators overloading
biginteger operator+(const biginteger& left, const biginteger& right);
biginteger operator-(const biginteger& left, const biginteger& right);
ostream& operator<<(ostream& out, const biginteger& bint);
class biginteger ;
#endif // _big_integer_
#include "biginteger.h"
#include #include using std::cout;
using std::string;
using std::ostream;
// default constructor
biginteger::biginteger()
// constructor
biginteger::biginteger(const string& number)
}// constructor
biginteger::biginteger(const biginteger& other)
}// destructor
biginteger::~biginteger()
// overload '<<'
ostream& operator<<(ostream& out, const biginteger& bint)
return out;
}// overload '+'
biginteger operator+(const biginteger& left,
const biginteger& right) else
// caculate
temp.data_ = new int[temp.size_+1];//加法充其量只能多增乙個數字,因此只需多開闢乙個
minsize = left.size_ + right.size_ - temp.size_;//得到小的那個size
for (int i = 0; i < temp.size_; i++) else
}temp.data_[temp.size_] = 0;//陣列中第size_項進行初始化
// deal with the carry
for (int i = 0; i < temp.size_; i++)
}if (temp.data_[temp.size_] > 0)
return temp;
}// overload '-'
// promise that left >= right
biginteger operator-(const biginteger& left,
const biginteger& right) else //已經初始化
}// deal with the carry
for (int i = 0; i < temp.size_-1; i++)
}if (temp.data_[temp.size_-1] != 0)//若陣列不為0,直接返回
return temp;
temp.size_--;
for (int i = temp.size_-1; i >= 0 ; i--) else
}if (temp.size_ == 0)
temp.size_ = 1;
return temp;
}
高精度計算 加法 減法
include using namespace std int main 大家肯定會說 這不就是最普通的a b問題嗎?你是不是來搞笑的?但是你有沒有想過這樣乙個問題 當a和b的資料過於大的時候怎麼辦呢?比unsigned long long還大 先讓我們回顧一下小學的加法豎式,如256 749 74...
高精度運算 加法 減法
高精度算是我高中期間沒有學明白的知識點之一,其實挺簡單的東西。核心思路是 按位模擬豎式運算 說白了就是模擬題。加法減法從低位到高位模擬,因為會進製借位 乘法也從低到高因為進製 除法要從高到低因為我們手算除法時也是從高到低保留餘數的。高精度減法 1 include2 using namespace s...
高精度減法,高精度乘法
高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...