資訊保安原理
作業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 ...