問乙個facebook大數相乘的題
兩個大數相乘 char* multiply(char*,char*);
比如 char str1 = "23456789009877666555544444"
char str2 = "346587436598437594375943875943875"
最後求出他們的乘積
就是實現乘法的豎式實現。這是leetcode上multiplication那道題的程式,過了資料
string multiply(string num1, string num2)
res[i + num2.size ()] = carry;
}int i = num1.size () + num2.size () - 1;
while (i > 0 && res[i] == 0) i--;
string result;
while (i >= 0) result += char (res[i --] + '0');
return result;
}這樣空間和時間效率都不好。考慮到現在int一般是32位(4e9),每個int元素可以存多位十進位制數。這樣的話,單次int乘法的複雜度沒有變化,但是總的乘法次數下降了,使用空間也相應下降了。
面世問這個比較**把,沒有任何技術含量,就是別錯。string倒過來放,負號先拿掉
,返回pointer先malloc/new。還有什麼注意事項麼。
uva上有一道題要算滿足一定條件的加()種數,recursion很快就寫出來了,然後就要用
這個arbitrary precision integer arithmetic。寫了個char*的結果tle無數次。最後
有個大牛hint用vector,然後每個int可以一次算9位數字,結果輕鬆過。
把兩個運算元按一位、兩位、三位或者四位十進位制數(取決於int型別的大小)分割,儲存成整弄陣列,然後按照做乘法的步驟算一遍。空間複雜度o(m+n),時間複雜度o(mn),mn為兩運算元的長度。
去年還是前年的google codejam qual有一道題是用這個的,neal_wu的code可以用來學習。
先寫乙個字串相加的方法,然後用小學學過的辦法,一位一位來。。
這題是poj 1001的乙個子演算法。
接下來是大數加法,這個就簡單了.
void addtwolargenumbers(const string str1, const string str2, string &str3)
if (str3[0] == '0')
return;
}
大數乘法 大數加法實現
include include include include include include include include using namespace std 實現兩個數的加法 判斷乙個字串是否為有效的數 bool isvalidnumber const string s if 1 len ...
大數加法,大數乘法
include include include typedef struct node pnode 函式宣告 int multiply char strmultipliera,char strmultiplierb,char strrst pnode initlist char strmultipl...
演算法 大數加法和大數乘法
大數加法 以字串的形式讀入兩個數字,編寫乙個函式計算它們的和,以字串形式返回。字串長度不大於100000,保證字串僅由 0 9 這10種字元組成 public string solve add string s,string t else if j 0 else int sum x y m m su...