積跬步至千里 演算法強化訓練(7)大數問題

2021-07-02 20:45:00 字數 953 閱讀 3431

大數問題:當感覺用long或int已經不能滿足要求,需要考慮大數問題。大數問題將普通的數**算,轉移到字串上的操作。大數操作有很多寫法,但是我習慣用以下這個模板,因為對加法 乘法 減法都是乙個路子,便於記憶和理解。

大數乘法:

string multi(string str1, string str2)

大數加法:

string addstring(string str1 ,string str2)

大數減法:

string minusstring(string s1,string s2)

} //儲存計算結果

for (p=vec.size()-1;p!=-1;p--)//找到最高位

if(vec[p]!=0) break;

if(p==-1) p=0;//只有一位零時候

//構造結果字串

string res(p+1,'0');

for (k = p;k>=0;--k)

res[p-k] = char(vec[k]+'0');

if(minus) res = "-"+res;

return res;

}

通過以上幾個**,可以看到大數的操作應用了乙個類似的模板

判斷基本條件——反轉兩個輸入串——構造vector,並進行運算處理——構造結果串

大數階乘:階乘在n為十幾的時候就會發生溢位,所以要用字串來處理

void factorial(int n) //n>=1

else

result = multi(power(n/2),power(n/2));

return result;

}

積跬步至千里 演算法強化訓練(5)關於類的幾個操作

1 類的賦值函式 class cmystring 一般解法 cmystring cmystring operator const cmystring str 更好的解法 cmystring cmystring operator const cmystring str return this 參見 劍...

積跬步至千里系列之十一 leetcode小結

刷leetcode一周了,從easy級別開始刷的。可能是自己基礎太薄弱,刷完之後容易忘記,另外,有些題有思路,但是不能正常快速的轉換成程式描述,程式的實現能力差。今天先把上週刷的5道題做個小的總結。1.zigzag conversion 之 字形字串反轉 p a h n 048 a p l s i ...

不積跬步無以至千里

1.開始閱讀此流程,如果你還沒開始的話。嚴格地按照步驟執行。2.讀一下習題指南,在xv xvii頁。3.令n 1。4.開始閱讀第n章。不要閱讀該章開始的引言。5.你對該章的話題有無興趣?如果有,跳到第7步,否則,跳到第6步。6.是否n 2?如果不是,跳到第16步。如果是,無論如何請將此章過一遍。第1...