所謂大數相乘,就是指數字比較大,相乘的結果超出了基本型別的表示範圍,所以這樣的數不能夠直接做乘法運算。
假設有a和b兩個大數,位數分別為a和b。根據我們平常手動計算乘法的方式可以看出,最終的結果的位數c一定小於等於a+b。
由於數字無法用乙個整形變數儲存,很自然的想到用字串來表示一串數字。然後按照乘法的運算規則,用乙個乘數的每一位乘以另乙個乘數,然後將所有中間結果按正確位置相加得到最終結果。可以分析得出如果乘數為a和b,a的位數為m,b的位數為n,則乘積結果為m+n-1位(最高位無進製)或m+n位(最高位有進製)。因此可以分配乙個m+n的輔存來儲存最終結果。為了節約空間,所有的中間結果直接在m+n的輔存上進行累加。
#include#includeusing namespace std;
string bignummultiply(string str1, string str2)
str[i] += mulflag + addflag;//把上次相乘的進製和相加的進製進行相加
}if (str[0] == '0')
str = str.substr(1, str.size());//獲取從第1位開始的長度為str.size()的字串
return str;
}int main()
return 0;
}
大數 相加 相減 相乘)
把乙個數當成乙個字串進行運算 大數相加 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 ...
大數問題 相乘,相減,相加 C 實現
c 自帶的long long型別表示的最大值是9223372036854775807 19位 如果有兩個超過這個範圍的數進行運算,就不能使用c 編譯器自帶的 了。我們把這種大數用c 裡面的string型別進行處理,處理過程中要注意進製 借位 字元轉數字的問題。string add string st...
大數相加 相減
這裡直接貼 了,裡面有注釋 另外裡面還有乙個是 乘法的,乘法的再上一部落格就有提到了,讀者可以 clickhere 裡面 由於輸入的問題可能 有亂碼情況 具體的源 我放在 include using namespace std include include define max a,b a b a...