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...