国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高精度算法筆記·····························

這篇具有很好參考價(jià)值的文章主要介紹了高精度算法筆記·····························。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

加法

減法

乘法

除法


高精度加法的步驟:

1.高精度數(shù)字利用字符串讀入

2.把字符串翻轉(zhuǎn)存入兩個(gè)整型數(shù)組A、B

3.從低位到高位,逐位求和,進(jìn)位,存余

4.把數(shù)組C從高位到低位依次輸出

????????1.2為準(zhǔn)備

vector<int> A, B, C;
string st1,st2;
cin >> st1 >> st2;
int len1 = st1.size(), len2 = st2.size();
for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');
for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

? ? ? ? 3為加法具體實(shí)現(xiàn)(0按位取反為-1,即-1時(shí)結(jié)束等價(jià)于>=0)

void add(vector<int> A, vector<int> B, vector<int>& C) {
	int t = 0, la = A.size(), lb = B.size();
	for (int i = 0; i < la || i < lb; i++) {
		if (i < la) t += A[i];
		if (i < lb) t += B[i];
		C.push_back(t % 10); //存余
		t /= 10; //進(jìn)位
	}
	if (t) C.push_back(t); //最高位
}

? ? ? ? 4為結(jié)果輸出,翻轉(zhuǎn)輸入所以一定也要翻轉(zhuǎn)輸出!?。?/p>

for (int i = C.size() - 1; ~i; i--) cout << C[i];

測(cè)試

高精度算法筆記·····························,算法篇,筆記,算法


高精度減法的步驟:

1.高精度數(shù)字利用字符串讀入

2.把字符串翻轉(zhuǎn)存入兩個(gè)整型數(shù)組A、B

3.若A<B,則交換A,B,輸出負(fù)號(hào)

4.從低位到高位,逐位求差,借位,存差

5.把數(shù)組C從高位到低位依次輸出

1.2為準(zhǔn)備(和加法同理)

vector<int> A, B, C;
string st1,st2;
cin >> st1 >> st2;
int len1 = st1.size(), len2 = st2.size();
for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');
for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

?3????????若A<B,則交換A,B,輸出負(fù)號(hào)

	if (cmp(A, B)) swap(A, B), cout << '-';

若A<B返回true的比較函數(shù)cmp()

bool cmp(vector<int> A, vector<int> B) {
	if (A.size() != B.size())
		return A.size() < B.size();
	for (int i = A.size() - 1; ~i; i--)
		if (A[i] != B[i]) 
			return A[i] < B[i];
//若A=B,返回false,避免給0加上負(fù)號(hào)
	return false;
}

?4為減法的具體實(shí)現(xiàn)

void sub(vector<int> A, vector<int> B, vector<int>& C) {
	int t, la = A.size(), lb = B.size();
	for (int i = 0; i < la; i++) {
		t = A[i];
		if (i < lb)t -= B[i];
		if (t < 0) A[i + 1]--, t += 10;//借位
		C.push_back(t);//存差
	}//C.back()返回最后一個(gè)元素,類似C[C.size()-1]
	while (C.size() > 1 && !C.back()) C.pop_back();
}//高位連續(xù)的0沒有意義,需要去掉

5為結(jié)果輸出,翻轉(zhuǎn)輸入所以也一定要翻轉(zhuǎn)輸出?。。。ê图臃ㄍ恚?/p>

for (int i = C.size() - 1; ~i; i--) cout << C[i];

測(cè)試

高精度算法筆記·····························,算法篇,筆記,算法


高精度乘法的步驟:

1.高精度數(shù)字利用字符串讀入

2.把字符串翻轉(zhuǎn)存入兩個(gè)整型數(shù)組A、B

3.從低位到高位,累加乘積,進(jìn)位,存余

4.把數(shù)組C從高位到低位依次輸出

1.2為準(zhǔn)備(和加法、減法同理)

vector<int> A, B, C;
string st1,st2;
cin >> st1 >> st2;
int len1 = st1.size(), len2 = st2.size();
for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');
for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

3

vector<int> mul(vector<int> A, vector<int> B) {
	int la = A.size(), lb = B.size();
	vector<int> C(la + lb, 0);
	for (int i = 0; i < la; i++) {
		for (int j = 0; j < lb; j++) {
			C[i + j] += A[i] * B[j];//累加乘積
			C[i + j + 1] += C[i + j] / 10;//進(jìn)位
			C[i + j] %= 10;//存余
		}
	}//去掉高位無意義的0
	while (C.size() > 1 && !C.back()) C.pop_back();
	return C;
}

4

vector<int> C(mul(A, B));
for (int i = C.size() - 1; ~i; i--) cout << C[i];

測(cè)試(因?yàn)檫@個(gè)數(shù)據(jù)可以用計(jì)算器算。。。)

高精度算法筆記·····························,算法篇,筆記,算法


高精度除法的步驟:

1.高精度數(shù)字利用字符串讀入

2.把字符串翻轉(zhuǎn)存入整型數(shù)組A

3.從高位到低位,當(dāng)前被除數(shù),存商,求余數(shù)

4.把數(shù)組C從高位到低位依次輸出

1.2為準(zhǔn)備,注意只存被除數(shù)A

vector<int> A, C;
long long b;
string st1;
cin >> st1 >> b;
int len1 = st1.size();
for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');

3為除法實(shí)現(xiàn)

void div(vector<int> A, long long b, vector<int>& C) {
	int la = A.size();
	long long t = 0;
	for (int i = la - 1; ~i; i--) {
		t = t * 10 + A[i];//當(dāng)前被除數(shù)
		C.push_back(t / b);//存商
		t %= b;//余數(shù)
	}//翻轉(zhuǎn)C,使無意義的連續(xù)0在C尾
	reverse(C.begin(), C.end());
	while (C.size() > 1 && !C.back()) C.pop_back();
}

4

for (int i = C.size() - 1; ~i; i--) cout << C[i];

測(cè)試

高精度算法筆記·····························,算法篇,筆記,算法


這實(shí)際是高精度除低精度。

真正的高精度除高精度:

1.高精度數(shù)字用字符串讀入

2.從高位到低位,逐位“試商”,存商,更新當(dāng)前被除數(shù)

3.翻轉(zhuǎn)輸出商

1

string st1, st2, st;
vector<int> C;
cin >> st1 >> st2;

2

string sub(string s, string st2) {
	vector<int> A, B, C;
	for (int i = s.size() - 1; ~i; i--) A.push_back(s[i] - '0');
	for (int i = st2.size() - 1; ~i; i--) B.push_back(st2[i] - '0');
	int t, la = A.size(), lb = B.size();
	for (int i = 0; i < la; i++) {
		t = A[i];
		if (i < lb) t -= B[i];
		if (t < 0) t += 10, A[i + 1]--;
		C.push_back(t % 10);
	}
	string str;
	while (C.size() > 1 && !C.back()) C.pop_back();
	for (int i = C.size() - 1; ~i; i--) str += C[i] + '0';
	return str;
}
bool cmp(string s, string st2) {
	if (s.size() != st2.size())
		return s.size() > st2.size();
	for (int i = 0; i < s.size(); i++) {
		if (s[i] != st2[i])
			return s[i] > st2[i];
	}
	return true;
}
string div(string st1, string st2, vector<int>& C) {
	string s;
	for (int i = 0; i < st1.size(); i++) {
		s += st1[i];//s>st2 -> true
		int cnt = 0;
		while (cmp(s, st2) && cnt < 10) {
			s = sub(s, st2);
			cnt++;
		}
		C.push_back(cnt);
	}
	reverse(C.begin(), C.end());
	while (C.size() > 1 && !C.back()) C.pop_back();
	return s;
}

3

st = div(st1, st2, C);
for (int i = C.size() - 1; ~i; i--) cout << C[i];
cout << '\n' << st;

順便算了余數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-812994.html

到了這里,關(guān)于高精度算法筆記·····························的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++高精度算法

    目錄 前言:? 思路: 高精度加法: 高精度減法: 高精度乘法: 高精度除法: ?代碼: 一、高精度加法 二、高精度減法? 三、高精度乘法? 四、高精度除法 最后 ? ? ? ? 計(jì)算機(jī)最初、也是最重要的應(yīng)用就是數(shù)值運(yùn)算。在編程進(jìn)行數(shù)值運(yùn)算時(shí),有時(shí)會(huì)遇到運(yùn)算的精度要求特

    2024年02月14日
    瀏覽(96)
  • C++基礎(chǔ)算法高精度篇

    C++基礎(chǔ)算法高精度篇

    ??作者主頁:慢熱的陜西人 ??專欄鏈接:C++算法 ??歡迎各位大佬??點(diǎn)贊??關(guān)注??收藏,??留言 主要講解了高精度算法的四種常用的計(jì)算 以下數(shù)字均指位數(shù) ①A + B(精度均在10^6) ②A - B (精度均在10^6) ③A * b (len(A) = 10^6, a = 1000); ④A / b (len(A) = 10^6, a = 1000); Ⅲ. Ⅰ . A

    2024年02月16日
    瀏覽(27)
  • C++ 算法 高精度(較詳細(xì).)

    C++ 算法 高精度(較詳細(xì).)

    ????????在我們進(jìn)行計(jì)算的過程中,經(jīng)常會(huì)遇到 幾十位,甚至幾百位的數(shù)字 的計(jì)算問題,也有可能會(huì)遇到小數(shù)點(diǎn)后幾十位,幾百位的情況,而我們面對(duì)這樣的情況下,?? 和 的數(shù)據(jù)范圍顯然是 不夠使用 的了。因此這時(shí),我們就需要引入一個(gè)新的算法,叫做 高精度算法

    2023年04月10日
    瀏覽(19)
  • 基于matlab的高精度信號(hào)峰值檢測(cè)算法

    基于matlab的高精度信號(hào)峰值檢測(cè)算法

    目錄 1.算法描述 2.仿真效果預(yù)覽 3.MATLAB核心程序 4.完整MATLAB ? ? ? ?峰值檢驗(yàn)是示波表中數(shù)據(jù)采集方式之一, 這種技術(shù)起源于存儲(chǔ)深度不能滿足捕獲毛刺的需要。如果用模擬示波器去觀察, 只有當(dāng)毛刺信號(hào)是重復(fù)性的并且和主信號(hào)同步時(shí), 才能看到毛刺信號(hào)?。由于毛刺源于其

    2024年02月12日
    瀏覽(89)
  • 洛谷題單算法1-1模擬與高精度

    發(fā)文章只是為了督促自己做題,雙非大二剛轉(zhuǎn)科班的菜菜一枚,代碼僅供參考,不足之處望理解。 ????????這題太惡心了,看完題解發(fā)現(xiàn)三種情況沒有考慮,后來給補(bǔ)上了,我的 if-else 思路可能寫的不太好,但是能過 ? ? ? ? 注意結(jié)構(gòu)體在函數(shù)中的傳參(下學(xué)期c語言II要好

    2024年02月19日
    瀏覽(25)
  • 算法之高精度(含實(shí)例與詳解)C語言

    算法之高精度(含實(shí)例與詳解)C語言

    ? ? ? ?高精度本質(zhì)上是一種計(jì)算,由于int型和long long型的存儲(chǔ)的數(shù)據(jù)大小有限。在有符號(hào)定義的情況下,int型為2的31次方減1;在無符號(hào)定義的情況下,lint型為2的32次方。因此過于巨大的數(shù)無法展示,這就用到了高精度來計(jì)算,其原理為將很大的數(shù)一位一位存在數(shù)組中,最后

    2024年02月06日
    瀏覽(19)
  • C++基礎(chǔ)算法①——高精度加減法計(jì)算

    C++基礎(chǔ)算法①——高精度加減法計(jì)算

    當(dāng)我們利用計(jì)算機(jī)進(jìn)行數(shù)值計(jì)算,有時(shí)候會(huì)遇到這樣的問題: n!的精確結(jié)果是多少? 當(dāng)n小于30的時(shí)候,我們當(dāng)然可以通過電腦自帶的計(jì)算器計(jì)算出來。但是當(dāng)我們遇到 100! 的時(shí)候就沒有辦法直接計(jì)算出精確的結(jié)果。再比如,求兩個(gè)20000位的數(shù)的和。 那怎么解決精度缺失的問

    2024年02月16日
    瀏覽(22)
  • 【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}

    【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}

    Hi~?o(* ̄▽ ̄*)ブ,今天來一起看看c++算法之高精度 之后會(huì)持續(xù)更新有關(guān)c++算法系列,歡迎觀看!(#^.^#) 目錄 前言 使用高精度的目的: 基本方法介紹:? ?一、A+B?problem 基本思路解析: 具體步驟: 代碼如下: 二、A-B problem 基本思路解析: ?編輯 具體步驟: ?代碼如下: ?三

    2024年01月23日
    瀏覽(21)
  • 每周一算法:高精度乘法(二)大整數(shù)乘大整數(shù)

    每周一算法:高精度乘法(二)大整數(shù)乘大整數(shù)

    高精度乘法是采用模擬算法對(duì)上百位甚至更多位的數(shù)字進(jìn)行乘法運(yùn)算。具體應(yīng)用時(shí)一般分為兩類: 大整數(shù)數(shù)乘整數(shù) 大整數(shù)乘大整數(shù) 大整數(shù)乘大整數(shù)的基本思想是模擬豎式計(jì)中算多位數(shù)乘多位數(shù),一般分為下面幾步: 將乘數(shù) A A A 的每一位 A i A_i A i ? 分別與乘數(shù) B B B 的每一

    2023年04月14日
    瀏覽(94)
  • C/C++ 高精度(加減乘除)算法二進(jìn)制優(yōu)化

    C/C++ 高精度(加減乘除)算法二進(jìn)制優(yōu)化

    第一章 簡(jiǎn)單實(shí)現(xiàn) 第二章 壓位優(yōu)化 第三章 二進(jìn)制優(yōu)化(本章) 上一章《C/C++ 高精度(加減乘除)算法壓位優(yōu)化》實(shí)現(xiàn)了優(yōu)化的高精度計(jì)算,采用int32的整型數(shù)組每個(gè)元素可以儲(chǔ)存9個(gè)10進(jìn)制數(shù)字,想要再進(jìn)一步優(yōu)化計(jì)算速度,可以改變數(shù)據(jù)存儲(chǔ)方式,采用二進(jìn)制存儲(chǔ)數(shù)字。依然采

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包