大數加法和大數乘法的實現

2021-06-06 15:29:51 字數 1274 閱讀 2869

問乙個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...