大數問題 相乘,相減,相加 C 實現

2021-09-19 19:10:55 字數 1630 閱讀 4626

c++自帶的long long型別表示的最大值是9223372036854775807(19位),如果有兩個超過這個範圍的數進行運算,就不能使用c++編譯器自帶的+、-、*了。我們把這種大數用c++裡面的string型別進行處理,處理過程中要注意進製、借位、字元轉數字的問題。

string add(string str1, string str2)

for (j = len2 - 1, k = 0; j >= 0; --j)

for (i = 0, up = 0; i < l; ++i)

for (i =max(len1,len2); i >= 0; --i) }

for (k = i; k >= 0; --k)//從下標i開始拼接,倒著拼接

return s;

}

string sub(string str1, string str2)

if (str1.size() == str2.size()) }

int len1, len2;

int a[l], b[l];

len1 = str1.length();

len2 = str2.length();

fill(a, a + l, 0);

fill(b, b + l, 0);

int i, j, k, up;

for (i = len1 - 1, k = 0; i >= 0; --i)

for (j = len2 - 1, k = 0; j >= 0; --j)

for (i = 0, up = 0; i <= max(len1, len2)-1; ++i)

else

}for (i = max(len1, len2)-1; i >= 0; --i) }

if (flag == true)

s += '-';

for (k = i; k >= 0; --k)//從下標i開始拼接,倒著拼接

return s;

}

string mul(string a, string b) 

else

if (nc[la + lb]) //m位數與n位數相乘最長為m+n位,最短位m+n-1位

s += nc[la + lb] + '0';//如果最高位是1,把該位先拼接出來,如果是0,要把這個0捨去,不進行拼接

for (i = la + lb - 1; i >= 1; i--)

s += nc[i] + '0';//倒著拼接

return s;} }

#include#include#include#includeusing namespace std;

const int l = 11000;//可以在這塊設定大數的範圍

int main()

加;

減:

乘:

大數 相加 相減 相乘)

把乙個數當成乙個字串進行運算 大數相加 include include include char s1 2000 char s2 2000 void add1 int main void add1 去除前邊多餘的零,從第乙個不是零的位置輸出 for i 1999 i 0 i if num1 i 0 ...

大數相乘演算法(相加,相減)

所謂大數相乘,就是指數字比較大,相乘的結果超出了基本型別的表示範圍,所以這樣的數不能夠直接做乘法運算。假設有a和b兩個大數,位數分別為a和b。根據我們平常手動計算乘法的方式可以看出,最終的結果的位數c一定小於等於a b。由於數字無法用乙個整形變數儲存,很自然的想到用字串來表示一串數字。然後按照乘法的...

大數相加 相減

這裡直接貼 了,裡面有注釋 另外裡面還有乙個是 乘法的,乘法的再上一部落格就有提到了,讀者可以 clickhere 裡面 由於輸入的問題可能 有亂碼情況 具體的源 我放在 include using namespace std include include define max a,b a b a...