3.高精度乘法
#include<iostream> // 引入輸入輸出流庫
#include<cstring> // 引入字串處理庫
using namespace std;
char s1[2005], s2[2005]; // 用於儲存輸入的兩個大數
int a[2005], b[2005], c[2005]; // 陣列用於儲存數字和結果
int main()
{
int la, lb, lc; // 分別儲存s1和s2的長度,以及結果的長度
cin >> s1; // 從標準輸入讀取第一個大數
cin >> s2; // 從標準輸入讀取第二個大數
la = strlen(s1); // 計算第一個大數的長度
lb = strlen(s2); // 計算第二個大數的長度
// 將字串s1中的字元轉換為數字,儲存在陣列a中,逆序儲存
for (int i = 0; i < la; i++)
{
a[la - i] = s1[i] - '0'; // 將字元轉為對應的整數
}
// 將字串s2中的字元轉換為數字,儲存在陣列b中,逆序儲存
for (int i = 0; i < lb; i++)
{
b[lb - i] = s2[i] - '0'; // 將字元轉為對應的整數
}
lc = la + lb; // 結果的最大可能長度是兩個數長度的和
// 進行大數乘法,類似手動乘法的過程
for (int i = 1; i <= la; i++)
{
for (int j = 1; j <= lb; j++)
{
c[i + j - 1] += a[i] * b[j]; // 計算對應位a的乘積並加到結果中
c[i + j] += c[i + j - 1] / 10; // 處理進位
c[i + j - 1] %= 10; // 當前位保持在0-9之間
}
}
// 如果結果最高位為0且該結果不為0,減少結果長度
if (c[lc] == 0 && lc > 0) lc--;
// 從高位到低位輸出結果
for (int i = lc; i > 0; i--)
cout << c[i]; // 輸出結果陣列中的數字
return 0; // 返回0表示程式正常結束
}