大數問題:當感覺用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...