高精度類的實現 加減乘除冪餘

2021-06-21 01:34:18 字數 3095 閱讀 8562

資訊保安原理

作業3 

hw2. large number arithmetic

繼承上個版本的,目前最新版,暫無bug

// name: bigint.h

// author: amrzs

// date: 2014/03/18

#ifndef bigint_h

#define bigint_h

#include using namespace std;

class bigint;

#endif // bigint_h

// name: bigint.cpp

// author: amrzs

// date: 2014/03/18

#include #include #include "bigint.h"

using namespace std;

bigint::bigint()

bigint::bigint(string &s)

for (int i = size-1; i >= 0; i--)

arr[i] = s[size-i-1] - '0';

}bigint::~bigint()

int bigint::getsize()

bigint bigint::operator+(bigint &x)

if(result.size > max_size)

return result;

}bigint bigint::operator-(bigint &x)

while(result.size > 1 && 0 == result.arr[result.size-1])

result.size--;

return result;

}bigint bigint::operator*(bigint &x)

for (int i = 0; i < size; i++)

for (int j = 0; j < x.size; j++)

}if (result.arr[result.size] > 0)

result.size++;

return result;

}bigint bigint::operator/(bigint &x)

pow--;

}result.size = size - x.size + 1;

while(result.size > 1 && 0 == result.arr[result.size-1])

result.size--;

return result;

}bigint bigint::operator/(int x)

result.size = size;

while(result.size > 1 && 0 == result.arr[result.size-1])

result.size--;

return result;

}bigint bigint::operator%(bigint &x)

bigint bigint::getpow(int n, bigint &x)

if(1 == n)

bigint t = getpow(n/2, x);

bigint result = t * t % x;

if(1 == n%2)

return result;

}bigint bigint::getpow(bigint &n, bigint &x)

bigint ndiv2 = n / 2;

bigint t = getpow(ndiv2, x);

bigint result = t * t % x;

if(n.isodd())

return result;

}bigint bigint::getpow10(int n)

bool bigint::operator>=(bigint &x)

return true; //greater

}bool bigint::isodd()

bool bigint::equalone()

void bigint::clear()

void bigint::printnum()

// name: main.cpp

// author: amrzs

// date: 2014/03/18

#include #include #include "bigint.h"

using namespace std;

bigint calc(bigint a, bigint b, char c)

return result;

}int main()

bigint a(s1), b(s2), result;

if('^' == ch1)else

result.printnum();

}return 0;

}

makefile

cpp = g++

oflag = -o

target = a.out

objs = main.o bigint.o

$(target): $(objs)

$(cpp) $(oflag) $(target) $(objs)

main.o: main.cpp bigint.o

bigint.o: bigint.cpp

.phony: clean

clean:

-rm $(target) $(objs)

用python生成的資料做過測試,不過python生成很大的冪的數要很長時間,所以只是用了小的冪的資料測試

隨便輸入乙個幾十位的冪的表示式,產生結果速度挺快的

bigint.cpp類的函式實現順序有點亂

c++如果標準庫有單元測試框架就好了,這樣寫程式做測試就方便多了,還能合作開發

這個程式寫了好久,挺累的,沒想到自己水平還不咋地。

高精度加減乘除

一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...

高精度加 減 乘 除演算法實現

在說高精度加減乘除運算之前,我們先搞明白什麼是高精度運算?實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如 求兩個100位...

高精度演算法,加減乘除

高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...