小工程 大數類

2022-04-29 03:03:09 字數 2862 閱讀 9773

突然發現自己從來沒有寫過正兒八經的大數.於是在退役之前寫一把.

希望能在用到大數時替代掉慢死的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...