將大數當做字串進行處理,也就是將大數用十進位制字元陣列進行表示,然後模擬人們手工進行「豎式計算」的過程得到乘法的結果。
#include
using
namespace
std;
#define maxn 100
string multiply(char line1, char line2)
else
if (number == '-' && len1 == 1)
else
if (number > '9' || number < '0')
}else
}if (number != '-')
}for (int i = 0; i < len2; i++)
else
if (number == '-' && len2 == 1)
else
if (number > '9' || number < '0')
}else
}if (number != '-')
}if (line1isnegativenumber)
if (line2isnegativenumber)
memset(result, 0, sizeof(short) * (maxn - 1));
for (int i = 0; i < len1; i++)
}int carry = 0;
for (int i = 0; i <= len; i++)
int reallen = 0;//實際的計算結果長度
for(int i = len - 1; i >= 0; i--)
}if (line1isnegativenumber ^ line2isnegativenumber)
char *line = new
char[reallen + 1];
if (reallen == 0)
else
for (; i < reallen; i++)
line[reallen] = '\n';
}return line;
}int main(int argc, const
char * argv)
}return
0;}
參考 演算法 大數加法和大數乘法
大數加法 以字串的形式讀入兩個數字,編寫乙個函式計算它們的和,以字串形式返回。字串長度不大於100000,保證字串僅由 0 9 這10種字元組成 public string solve add string s,string t else if j 0 else int sum x y m m su...
高精度演算法 大數乘法
由於相乘的兩個數答案很大超過了longlong或者unsigned longlong,就需要使用大數乘法。給定兩個正整數a和b,請你計算a b的值。輸入格式 共兩行,第一行包含整數a,第二行包含整數b。輸出格式 共一行,包含a b的值。資料範圍 1 a的長度 100000 1 b 10000 輸入樣...
大數乘法問題及其高效演算法
求 1234567891011121314151617181920 2019181716151413121110987654321 的乘積結果分治乘法 最簡單的是karatsuba乘法,一般化以後有toom cook乘法 快速傅利葉變換fft 為了避免精度問題,可以改用快速數論變換fntt 時間複雜...