最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++高精度算法的使用場(chǎng)景詳解

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

描述

如果要計(jì)算的數(shù)超過了long long怎么解決? —>使用高精度加減乘除,簡單理解就是 很大的數(shù)進(jìn)行加減乘除。

1. 高精度加法

1. 思路

  • 創(chuàng)建對(duì)應(yīng)的數(shù)組變量及其他變量
  • 輸入字符串
  • 將讀入的數(shù)據(jù)轉(zhuǎn)化為整數(shù)類型,并逆序(反轉(zhuǎn))存儲(chǔ)到數(shù)組中
  • 將兩個(gè)數(shù)組做累加(注意進(jìn)位)
  • 判斷最高位是否為0,大于0代表進(jìn)位了,則讓長度加1
  • 倒序輸出

2. 代碼

#include<bits/stdc++.h>
using namespace std;
int a[510], b[510], c[510];//a:被加數(shù)  b:加數(shù)  c:和 
int main(){
	// 1. 輸入字符串 
    string str1,str2;
    cin >> str1 >> str2;
    // 2. "1,2,3,4"轉(zhuǎn)換為{1,2,3,4},并且反轉(zhuǎn) {4,3,2,1}
    for (int i = 0; i < str1.size(); i ++)
        a[str1.size()-1 - i] = str1[i] - '0';
    for (int i = 0; i < str2.size(); i ++)
        b[str2.size()-1 - i] = str2[i] - '0';  
	// 3. 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完 
    int ans = max(str1.size(), str2.size());
    // 4. 相加(a+b) 
    for (int i = 0; i < ans; i ++){//遍歷至最大長度,避免有的數(shù)字沒計(jì)算 
        c[i] += a[i] + b[i];//相加 
        c[i+1] = c[i] / 10;// 進(jìn)位 
        c[i] %= 10;//將加的結(jié)果求余10 得出第i位 
    }
    //4. 如果結(jié)果數(shù)組第ans位的數(shù)大于0(大于0代表進(jìn)位了),則讓長度增加1 
    while(c[ans]>0) ans++;  
    //5. 倒序輸出 
    for (int i = ans-1; i >= 0; i--)
        cout << c[i];
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[500],b[500],c[501],ans[501],len_a,len_b,len_ans;//a:加數(shù)1  b:加數(shù)2  c:進(jìn)位數(shù)組  ans:結(jié)果數(shù)組 
int main(){
	// 1. 輸入字符串 
    string str1,str2;
    cin >> str1 >> str2;
	len_a = str1.length();
	len_b = str2.length();
    // 2. "1,2,3,4"轉(zhuǎn)換為{1,2,3,4},并且反轉(zhuǎn) {4,3,2,1}
    for (int i = 0; i < str1.size(); i ++)
        a[str1.size()-1 - i] = str1[i] - '0';
    for (int i = 0; i < str2.size(); i ++)
        b[str2.size()-1 - i] = str2[i] - '0';  
	// 3. 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完 
	len_ans = max(len_a,len_b);
	// 4. 相加(a+b) 
	for(int i=0;i<=len_ans;i++){
		ans[i] = a[i] + b[i] + c[i];//結(jié)果數(shù)組 =(等于) 被加數(shù) 加上  加數(shù) 加上 進(jìn)位的數(shù)  
		if(ans[i] > 9){//如果結(jié)果數(shù)組大于9,則進(jìn)位 
			c[i+1] = ans[i] / 10;//給進(jìn)位數(shù)組賦值 
			ans[i] %= 10; // 讓結(jié)果數(shù)組大于9的數(shù)求余10,變成個(gè)位數(shù) 
		}
	} 
	//5. 如果結(jié)果數(shù)組len_ans位的數(shù)大于0,則讓長度增加1 
	while(ans[len_ans]>0) len_ans++;
	//6. 倒敘輸出 
	for(int i=len_ans-1;i>=0;i--) cout<<ans[i];
	return 0;
}

2. 高精度減法

1. 思路

  • 定義被減數(shù)a,減數(shù)b,結(jié)果c數(shù)組
  • 輸入被減數(shù)和減數(shù),并且將數(shù)據(jù)倒敘存入數(shù)組中。
  • 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完
  • 將兩個(gè)數(shù)組做相減(遍歷至最大長度,避免有的數(shù)字沒計(jì)算 )。
  • 去掉前導(dǎo) 0 。例如結(jié)果為:089,不需要0
  • 循環(huán)遍歷輸出

2. 代碼

#include<bits/stdc++.h>
using namespace std;
int a[510], b[510], c[510];//a:被減數(shù)  b:減數(shù)  c:結(jié)果 
int main(){
	// 1. 輸入字符串 
    string str1,str2;
    cin >> str1 >> str2;
    // 2. "1,2,3,4"轉(zhuǎn)換為{1,2,3,4},并且反轉(zhuǎn) {4,3,2,1}
    for (int i = 0; i < str1.size(); i ++)
        a[str1.size()-1 - i] = str1[i] - '0';
    for (int i = 0; i < str2.size(); i ++)
        b[str2.size()-1 - i] = str2[i] - '0';  
	// 3. 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完 
    int ans = max(str1.size(), str2.size());
    // 4. 相減(a-b) 
    for (int i = 0; i < ans; i ++){//遍歷至最大長度,避免有的數(shù)字沒計(jì)算 
    	if(a[i] < b[i]){
        	a[i+1] -= 1;//向前借一位 
        	a[i] += 10;// 借一位以后加10 
		} 
        c[i] = a[i] - b[i]; 
    }
    //5. 如去掉前導(dǎo) 0 。例如結(jié)果為:089,不需要0
    while(c[ans-1]==0 && ans>1) ans--;  
    //6. 倒序輸出 
    for (int i = ans-1; i >= 0; i--)
        cout << c[i];
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[500],b[500],c[501],ans[501],len_a,len_b,len_ans;//a:被減數(shù)  b:減數(shù)  c:進(jìn)位  ans:結(jié)果 
int main(){
	// 1. 輸入字符串 
    string str1,str2;
    cin >> str1 >> str2;
	len_a = str1.length();
	len_b = str2.length(); 
    // 2. "1,2,3,4"轉(zhuǎn)換為{1,2,3,4},并且反轉(zhuǎn) {4,3,2,1}
    for (int i = 0; i < str1.size(); i ++)
        a[str1.size()-1 - i] = str1[i] - '0';
    for (int i = 0; i < str2.size(); i ++)
        b[str2.size()-1 - i] = str2[i] - '0';  
	// 3. 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完 
	len_ans = max(len_a,len_b);
	// 4. 相減(a-b)
	for(int i=0;i<=len_ans;i++){
		ans[i] = a[i] - b[i] - c[i];//結(jié)果數(shù)組 =(等于) 被減數(shù) 減去  減數(shù)  減去 進(jìn)位的數(shù)  
		if(ans[i] < 0){//如果結(jié)果數(shù)組小于0,則借位 
			ans[i] += 10;// 借1位,加上10 
			c[i+1]++;    // 進(jìn)位數(shù)組加1 
		}
	} 
	//5. 如去掉前導(dǎo) 0 。例如結(jié)果為:089,不需要0
	while(len_ans>1 && ans[len_ans-1]==0) len_ans--;
	//6. 倒序輸出 
	for(int i=len_ans-1;i>=0;i--) cout<<ans[i];
	return 0;
}

3. 如果出現(xiàn)被減數(shù)的位數(shù)小于減數(shù)時(shí)呢

#include<bits/stdc++.h>
using namespace std;
int a[510], b[510], c[510];//a:被減數(shù)  b:減數(shù)   c:結(jié)果 
int flag = 0;
int main(){
	// 1. 輸入字符串 
    string str1,str2;
    cin >> str1 >> str2;
    //2. str1.size() < str2.size() 或者 兩個(gè)數(shù)一樣長并且被減數(shù)的數(shù)值小于減數(shù)時(shí),才需要交換兩數(shù)位置
    if(str1.size() < str2.size() || str1.size() == str2.size() && str1 < str2) {
    	string t = str1;
    	str1 = str2;
    	str2 = t;
    	flag = 1;
	}
    // 3. "1,2,3,4"轉(zhuǎn)換為{1,2,3,4},并且反轉(zhuǎn) {4,3,2,1}
    for (int i = 0; i < str1.size(); i ++)
        a[str1.size()-1 - i] = str1[i] - '0';
    for (int i = 0; i < str2.size(); i ++)
        b[str2.size()-1 - i] = str2[i] - '0';  
	// 4. 找兩個(gè)字符串最大的個(gè)數(shù),目的是為了將每一位計(jì)算完 
    int ans = max(str1.size(), str2.size());
    // 5. 相減(a-b) 
    for (int i = 0; i < ans; i ++){//遍歷至最大長度,避免有的數(shù)字沒計(jì)算 
    	if(a[i] < b[i]){
        	a[i+1] -= 1;//向前借一位 
        	a[i] += 10;// 借一位以后加10 
    	}
		c[i] = a[i] - b[i]; 
    }
    //6.如去掉前導(dǎo) 0 。例如結(jié)果為:089,不需要0
    while(c[ans-1]==0 && ans>1) ans--;  
    //7. 倒敘輸出 
    if(flag == 1) cout<<"-";
    for (int i = ans-1; i >= 0; i--)
        cout << c[i];
    return 0;
}

到此這篇關(guān)于C++高精度算法的使用場(chǎng)景詳解的文章就介紹到這了,更多相關(guān)C++高精度算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ win系統(tǒng)如何用MinGW編譯Boost庫

    C++ win系統(tǒng)如何用MinGW編譯Boost庫

    這篇文章主要介紹了C++ win系統(tǒng)如何用MinGW編譯Boost庫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 基于C++實(shí)現(xiàn)Socket交互式服務(wù)端

    基于C++實(shí)現(xiàn)Socket交互式服務(wù)端

    在?Windows?操作系統(tǒng)中,原生提供了強(qiáng)大的網(wǎng)絡(luò)編程支持,允許開發(fā)者使用?Socket?API?進(jìn)行網(wǎng)絡(luò)通信,本文將深入探討如何通過調(diào)用原生網(wǎng)絡(luò)?API?實(shí)現(xiàn)同步遠(yuǎn)程通信,并介紹了一個(gè)交互式?Socket?類的封裝,需要的可以參考下
    2024-02-02
  • C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng)

    C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言實(shí)現(xiàn)控制臺(tái)五子棋小游戲

    C語言實(shí)現(xiàn)控制臺(tái)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)控制臺(tái)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    這篇文章主要介紹了C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 淺析C++11新特性的Lambda表達(dá)式

    淺析C++11新特性的Lambda表達(dá)式

    C++11 新增了很多特性,lambda 表達(dá)式是其中之一,本文涉及到C++11這次更新中較為重要的lambda表達(dá)式。有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • C語言學(xué)習(xí)進(jìn)階篇之萬字詳解指針與qsort函數(shù)

    C語言學(xué)習(xí)進(jìn)階篇之萬字詳解指針與qsort函數(shù)

    之前的指針詳解中,提到過qsort函數(shù),這個(gè)函數(shù)是用來排序的,下面這篇文章主要給大家介紹了關(guān)于C語言指針與qsort函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C語言動(dòng)態(tài)分配二維字符串?dāng)?shù)組的方法

    C語言動(dòng)態(tài)分配二維字符串?dāng)?shù)組的方法

    小編最近忙里偷閑,給大家整理一份教程關(guān)于C語言動(dòng)態(tài)分配二維字符串?dāng)?shù)組的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10
  • c語言中exit和return的區(qū)別點(diǎn)總結(jié)

    c語言中exit和return的區(qū)別點(diǎn)總結(jié)

    小編今天給大家整理了關(guān)于c語言中exit和return的不同點(diǎn)及相關(guān)基礎(chǔ)知識(shí)點(diǎn),有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-10-10
  • Opencv基于文字檢測(cè)去圖片水印的實(shí)現(xiàn)示例

    Opencv基于文字檢測(cè)去圖片水印的實(shí)現(xiàn)示例

    去水印是個(gè)麻煩事,本文就來介紹一種方法Opencv基于文字檢測(cè)去圖片水印的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評(píng)論

区。| 林周县| 如皋市| 美姑县| 霍林郭勒市| 富川| 于都县| 菏泽市| 财经| 蒙自县| 阳春市| 若羌县| 长丰县| 桃源县| 全南县| 嘉义市| 黄冈市| 林州市| 库尔勒市| 长子县| 内丘县| 合水县| 聊城市| 金山区| 邹城市| 曲麻莱县| 洪泽县| 马鞍山市| 和静县| 云霄县| 通化县| 鄂州市| 桑日县| 保靖县| 甘孜县| 桓仁| 肥西县| 泰宁县| 漳州市| 辰溪县| 夏河县|