有關高精度和排序的回顧

2022-06-01 18:36:10 字數 2536 閱讀 3340

注:本文為回顧,所以僅會記錄本人認為的難點與分析

乘法可用豎式計算,\(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 重複上述...