注:本文為回顧,所以僅會記錄本人認為的難點與分析
乘法可用豎式計算,\(a,b\)為因數,\(c\)為積
列出豎式後,可以發現,\(c\)的值與上一位的進製\(x\),\(a_i,b_j\)的積和進行幾次計算後\(c\)的值有關,所以我們得到\(c_=a_i \times b_j + x + c_,x=c_ \div 10,c_ \% =10\);
由此,我們可以得到以下程式:
#include #include #include using namespace std;
int lena,lenb,lenc,a[201],b[201],c[40101],x;
char al[201],bl[201];
int main()
c[i + lenb] = x;
} lenc = lena + lenb;
while (c[lenc] == 0 && lenc > 1)
lenc --;
for (int i = lenc;i >= 1;i --)
cout << c[i];
return 0;
}
我們利用減法代替除法,一次次的進行相減,直到無法繼續減
這裡主要用於兩數相減時,比較兩者大小,若相等,返回零即可,若被減數\(a\)大於減數\(b\),返回1,繼續運算,若小於\(b\),則返回-1,表示已不能繼續減;
int compare(int a,int b)
return 0;
}
先進行判斷,是否可以相減,再進行運算,具體步驟與高精度減法類似
void jian(int a,int b)
if (f == 1)
a[i] -= b[i];
} while (a[a[0]] == 0 && a[0] > 0) //去除前導零
a[0] --;
}}
由於我們在運算中並不是對兩個高精數直接相減,而是分段進行,所以需要乙個複製函式
void copy(int p,int q,int num)
我們在上面講過了,除法用減法進行代替,所以這裡的本質就是一次次迴圈相減,每減去一次,相應位上的\(c\)自加一;
void chu(int a,int b,int c)
} while (c[0] > 0 && c[c[0]] == 0)
c[0] --;//去除前導零
}
#include #include #include using namespace std;
int a[101],b[101],c[101];
void init(int i)
int compare(int a,int b)
return 0;
}void jian(int a,int b)
if (f == 1)
a[i] -= b[i];
} while (a[a[0]] == 0 && a[0] > 0)
a[0] --; }}
void copy(int p,int q,int num)
void chu(int a,int b,int c)
} while (c[0] > 0 && c[c[0]] == 0)
c[0] --;
}void print(int p)
for (int i = p[0];i > 0;i --)
cout << p[i];
cout << endl;
}int main()
高精乘:戳這裡
高精除:戳這裡
快排的主要思想是二分法,通過對資料進行二分提高速度,時間複雜度為\(o(n\log_)\),不過是一種不穩定的排序
#include #include using namespace std;
void quicksort (int , int, int);
int partition (int , int, int);
int main()
; for (int k = 0; k < size; k++)
cout << array[k] << " ";
cout << endl;
quicksort (array, 0, size-1);
for (int k = 0; k < size; k++)
cout << array[k] << " ";
cout << endl;
return 0;
}void quicksort (int arr, int start, int end)
}int partition(int arr, int start, int end)
}return pivotposition;
}
日後優化會持續跟進 高精度加法和高精度乘法
題目描述 谷學長有乙個非常簡單的問題給你,給你兩個整數a和b,你的任務是計算a b。輸入 輸入的第一行包含乙個整數t t 20 表示測試例項的個數,然後2 t行,分別表示a和b兩個正整數。注意整數非常大,那意味著你不能用32位整數來處理。你可以確定的是整數的長度不超過1000。輸出 對於每乙個樣例,...
大數相乘「高精度乘低精度」和「高精度乘高精度」
二 高精度乘高精度 如下 由於計算機的儲存位元組有限,所以不能完整表示乙個很大整數的精確值,這時候就得用到其他的方法,稱之為高精度演算法。這裡的高精度乘法主要指按位模擬乘法,實際上就是模擬乘法的過程,也就是筆算的過程。高精度乘低精度,即乙個大數與乙個小於10000的數相乘,大數使用字串來進行儲存,較...
大數相除「高精度除低精度」和「高精度除高精度」
二 高精度除高精度 採用計算機做高精度除法時,模擬日常除法的步驟。但計算機不可能做 試商 這時,我們可以採用減法來模擬 試商 的過程。演算法的步驟如下 1 將除數移動和被除數對齊,位數不夠時,補0。2 利用被除數減去除數,一直減到被除數小於除數,減的次數,就是 試商 的結果,每移動一次。3 重複上述...