突然發現自己從來沒有寫過正兒八經的大數.於是在退役之前寫一把.
希望能在用到大數時替代掉慢死的python.
專案位址github.com/frankaiyou/largeintegar
話說我在github上寫了好幾個東西都沒怎麼有人star.
看來還是太菜了.
寫的很差, bug很多.
output
constructor
memory management
convert with other formats
arithmetic operators
relational operators
logical operators
subscript operators
modified the way input a largeintegar,
which input a string and convert it to largeintegar;
calculate the memory more reasonable in substruction and addition;
added the new filehistort.cpp
, code that discarded place it here;
added relational operators;
streamline the add and sub;
實現思路是用一段連續的int32
來表示整段數字, 每個int32
只用4位, 為的是方便乘法操作.
同時可以在一定程度上減少計算量(是一般方法的四分之一), 雖然程式設計難度變大很多.
精簡了部分**
p1601 a+b problem(高精)
openjudge 3736 大整數減法
#include #include #include #include #include #include #include using namespace std;
#define initsize 30
#define maxoffbit 9999
#define calcbit(x) (x > 999 ? 4 : (x > 99 ? 3 : (x > 9 ? 2 : (x > 0 ? 1 : 0))))
class largeintegar
template largeintegar convert_int_to_largeintegar(int integar)
void redistribute_memory(int sz)
static largeintegar convert_string_to_largeintegar(string& str)
*p = str[i] - '0' + 10 * (str[i - 1] - '0') +
(str[i - 2] - '0') * 100 + 1000 * (str[i - 3] - '0');
p -= 1, res.bit += 4;
}return res;
}template largeintegar operator = (const int& o)
friend istream& operator >> (istream &in, largeintegar &int)
friend ostream& operator << (ostream &out, largeintegar &lint)
int* num = lint.begpos;
if (lint.sign) cout << '-';
out << *num; num += 1;
int tmp;
while (num != lint.endpos)
out << *num;
num += 1;
}return out;
}int operator ! () const
bool operator < (const largeintegar& o) const
return false;
}bool operator >= (const largeintegar& o) const
bool operator == (const largeintegar& o) const
return true;
}bool operator != (const largeintegar& o) const
bool operator > (const largeintegar& o) const
bool operator <= (const largeintegar& o) const
largeintegar operator + (const largeintegar& o) const
else res.begpos = r, res.bit += (p == begpos ? calcbit(*r) : 4);
p -= 1, q -= (q == o.begpos - 1 ? 0 : 1), r -= 1;
}if (flag) res.sign = true;
return res;
}largeintegar operator - () const
largeintegar operator - (const largeintegar& o) const
while (*res.begpos == 0 and res.begpos < res.endpos - 1)
res.begpos += 1;
return res;
}};int test()
int main ()
OpenCV常用的基礎小工程
本文中將列出opencv需常用的最小工程,以方便今後做測試用。工程環境為vs2010 opencv2.3.1 include stdafx.h include using namespace cv int main int argc,unsigned char argv return 0 inclu...
vs工程清理小工具
通常我們在傳輸vs工程的時候,有很多不必要的檔案可以清理,通常這些檔案占用的空間可能還比較大,遠超工程 檔案的大小,於是寫了這個小工具,方便清理工程,支援多個過程同時清理,拖拽到介面上即可。核心 如下 void cvsprojectcleanerdlg onbnclickedok else 開始逐個...
java小工具類
小工具集合類 author hp public class utils catch classnotfoundexception e catch sqlexception e return conn 讀取txt檔案 param filepath 檔案路徑 public static void rea...