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

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

這篇具有很好參考價值的文章主要介紹了【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Hi~?o(* ̄▽ ̄*)ブ,今天來一起看看c++算法之高精度

之后會持續(xù)更新有關c++算法系列,歡迎觀看!(#^.^#)

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-816563.html

目錄

前言

使用高精度的目的:

基本方法介紹:?

?一、A+B?problem

基本思路解析:

具體步驟:

代碼如下:

二、A-B problem

基本思路解析:

?編輯

具體步驟:

?代碼如下:

?三、A*B problem

基本思路解析:

具體步驟(多一步去零)?

代碼如下:

?四、A/B problem

基本思路解析:

具體步驟(多一步去零)?

?代碼如下:

總結(jié)


前言

使用高精度的目的:

簡單來說,當一個數(shù)足夠大時,甚至超過longlong范圍,這個時候我們就可以用上高精度算法,對這些數(shù)進行加減乘除操作了

基本方法介紹:?

該算法最主要的就是數(shù)組了,我們把大數(shù)看作字符再存入數(shù)組中,再用數(shù)組記錄結(jié)果,最后用數(shù)組輸出,同時因為加減乘除運算的獨特性,還會對數(shù)組進行逆序輸出,排序等一系列操作

?

?一、A+B?problem

基本思路解析:

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言

補充說明對a,b數(shù)組的操作 :

對a、b數(shù)組的詳細操作
a[100000] 由于是從個位加起,所以我們會將對a數(shù)組的錄入反過來,例如這里會有a[1]=8,a[2]=8,a[3]=1(從1開始還是從0開始都可以)
b[10000] 由于是從個位加起,所以我會將對b數(shù)組的錄入反過來,例如里面會有b[1=8,b[2]=8,b[3]=1(從1開始還是從0開始都可以)

具體步驟:

1.字符串讀入

string x,y;
int a[1000000],b[1000000],c[1000000],la,lb,lc;
int main()
{
	cin>>x>>y;
	la=x.length();
	lb=y.length();

2.字符串轉(zhuǎn)數(shù)組

這里解釋一下,因為加法是從個位開始的,所以我們讓字符串的最后一位存到數(shù)組的第一個去

for(int i=0;i<la;i++)
	{
		a[la-i]=x[i]-'0';
	}
	for(int i=0;i<lb;i++)
		{
			b[lb-i]=y[i]-'0';
		}

3.豎式加法?

 lc=max(la,lb);//找到兩數(shù)間的最大值,最大的那個是結(jié)果的長度(或者是結(jié)果長度-1)
	for(int i=1;i<=lc;i++)
	{
		c[i]+=a[i]+b[i];//注意這里的+=,這里+的是兩個數(shù)和前面進位的
		c[i+1]=c[i]/10;//往前進一位
		c[i]%=10;//進位后剩下的
	}	

4.倒序輸出
?

if(c[lc+1]>0)lc++;//最高位仍然進位,所以長度++
	for(int i=lc;i>=1;i--)//逆序輸出
	cout<<c[i];

代碼如下:

#include <bits/stdc++.h>
using namespace std;
string x,y;
int a[1000000],b[1000000],c[1000000],la,lb,lc;
int main()
{
	cin>>x>>y;
	la=x.length();
	lb=y.length();
	for(int i=0;i<la;i++)//將大數(shù)轉(zhuǎn)化為一個個數(shù)字并且存入數(shù)組中順便進行逆存
	{
		a[la-i]=x[i]-'0';
	}
	for(int i=0;i<lb;i++)//同上
		{
			b[lb-i]=y[i]-'0';
		}
    lc=max(la,lb);//找到兩數(shù)間的最大值,最大的那個是結(jié)果的長度(或者是結(jié)果長度-1)
	for(int i=1;i<=lc;i++)
	{
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/10;
		c[i]%=10;
	}	
	if(c[lc+1]>0)lc++;//最高位仍然進位,所以長度++
	for(int i=lc;i>=1;i--)//逆序輸出
	cout<<c[i];
	return 0;
}

二、A-B problem

基本思路解析:

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言

具體步驟:

1.字符串讀入

string x,y;
int a[1000000],b[1000000],c[1000000],la,lb,lc;
int main()
{
	cin>>x>>y;
	la=x.length();
	lb=y.length();

?2.字符串轉(zhuǎn)數(shù)組

和之前一樣,因為減法是從個位開始的,所以我們讓字符串的最后一位存到數(shù)組的第一個去

for(int i=0;i<la;i++)
	{
		a[la-i]=x[i]-'0';
	}
	for(int i=0;i<lb;i++)
		{
			b[lb-i]=y[i]-'0';
		}

3.豎式減法?

   for(int i=1;i<=la;i++)
	{
		if(a[i]<b[i])//減數(shù)小了 
		{
			a[i]+=10;//往前借位 
			a[i+1]-=1;//前一位減一 
		}
	c[i]=a[i]-b[i];//照常計算 
	}

4.倒序輸出

	for(int i=la;i>=1;i--)
	{
		cout<<c[i];
	}

?代碼如下:

#include <bits/stdc++.h>
using namespace std;
string x,y;
int a[100000],b[100000],c[100000],la,lb;
int main()
{
	cin>>x>>y;
	la=x.size();
	lb=y.size();
	if(la<lb||la==lb&&x<y)
	{
		swap(la,lb);
		swap(x,y);
	cout<<'-';
	}
	for(int i=0;i<la;i++)
	{
		a[la-i]=x[i]-'0';
	}
		for(int i=0;i<lb;i++)
		{
			b[lb-i]=y[i]-'0';
		}
    for(int i=1;i<=la;i++)
	{
		if(a[i]<b[i])//減數(shù)小了 
		{
			a[i]+=10;//往前借位 
			a[i+1]-=1;//前一位減一 
		}
	c[i]=a[i]-b[i];//照常計算 
	}

	for(int i=la;i>=1;i--)
	{
		cout<<c[i];
	}
	return 0;
}

?

?三、A*B problem

基本思路解析:

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言

具體步驟(多一步去零)?

1.字符串讀入

string x,y;
int a[1000000],b[1000000],c[1000000],la,lb,lc;
int main()
{
	cin>>x>>y;
	la=x.length();
	lb=y.length();

?2.字符串轉(zhuǎn)數(shù)組

和之前一樣,因為乘法也是從個位開始的,所以我們讓字符串的最后一位存到數(shù)組的第一個去

for(int i=0;i<la;i++)
	{
		a[la-i]=x[i]-'0';
	}
	for(int i=0;i<lb;i++)
		{
			b[lb-i]=y[i]-'0';
		}

3.豎式乘法

for(int i=1;i<=la;i++)
		{
			for(int j=1;j<=lb;j++)
			{
				c[i+j-1]+=a[i]*b[j];//正常相除,c[i]中結(jié)果的位數(shù)可以通過觀察總結(jié) 
				c[i+j]+=c[i+j-1]/10;//向前進位 
				c[i+j-1]%=10;//進位剩下的 
			}
		}

4.去零

去零指在特殊情況中如003*25=0075需要去除結(jié)果需要去除結(jié)果中的零

lc=la+lb;//兩數(shù)相乘的最大位數(shù) 
		while(c[lc]==0&&lc>1)lc--; 

5.倒序輸出

?
	for(int i=la;i>=1;i--)
	{
		cout<<c[i];
	}

?

代碼如下:

#include <bits/stdc++.h>
using namespace std;
string x,y;
int a[100000],b[100000],c[100000],la,lb,lc;
int main()
{
	cin>>x>>y;
	la=x.size();
	lb=y.size();
	for(int i=0;i<la;i++)
	{
		a[la-i]=x[i]-'0';
	}
	for(int i=0;i<lb;i++)
		{
			b[lb-i]=y[i]-'0';
		}
		for(int i=1;i<=la;i++)
		{
			for(int j=1;j<=lb;j++)
			{
				c[i+j-1]+=a[i]*b[j];//正常相除,c[i]中結(jié)果的位數(shù)可以通過觀察總結(jié) 
				c[i+j]+=c[i+j-1]/10;//向前進位 
				c[i+j-1]%=10;//進位剩下的 
			}
		}
		lc=la+lb;//兩數(shù)相乘的最大位數(shù) 
		while(c[lc]==0&&lc>1)lc--; 
	for(int i=lc;i>=1;i--)
	{
		cout<<c[i];
	}
	return 0;
}

?四、A/B problem

基本思路解析:

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言

?

具體步驟(多一步去零)?

1.字符串讀入

string a1;
long x=0,la,lc,a[100000],c[100000],b1;
int main()
{
	cin>>a1>>b1;
	la=a1.size();

?2.字符串轉(zhuǎn)數(shù)組

和之前不同,因為除法是從最高位開始的,所以我們讓字符串的第一位存到數(shù)組的第一個去

	for(int i=0;i<la;i++)
	{
		a[i]=a1[i-1]-'0';
	}

?3.除法

for(int i=1;i<=la;i++)
{
	c[i]=(x*10+a[i])/b1;//除不盡的*10再加上下一位 
	x=(x*10+a[i])%b1;//除不盡剩下的 
}
lc=1;

4.去零

while(c[lc]==0&&la>lc)lc++;

5.直接輸出

這里不用逆序

for(int i=lc;i<=la;i++)
{
	cout<<c[i];
}

?代碼如下:

#include <bits/stdc++.h>
using namespace std;
string a1;
long x=0,la,lc,a[100000],c[100000],b1;
int main()
{
	cin>>a1>>b1;
	la=a1.size();
	for(int i=0;i<la;i++)
	{
		a[i]=a1[i-1]-'0';
	}
for(int i=1;i<=la;i++)
{
	c[i]=(x*10+a[i])/b1;//除不盡的*10再加上下一位 
	x=(x*10+a[i])%b1;//除不盡剩下的 
}
lc=1;
while(c[lc]==0&&la>lc)lc++;
for(int i=lc;i<=la;i++)
{
	cout<<c[i];
}
return 0;
}

總結(jié)

①前面的字符串讀入和字符串轉(zhuǎn)換加減乘是一樣的

②去零操作存在于減乘除

③注意+=和=的區(qū)別

④謝謝大家耐心看完,希望能幫助到您??!(#^.^#)

【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)},c++,開發(fā)語言

到了這里,關于【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • C++高精度算法

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

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

    C++基礎算法高精度篇

    ??作者主頁:慢熱的陜西人 ??專欄鏈接:C++算法 ??歡迎各位大佬??點贊??關注??收藏,??留言 主要講解了高精度算法的四種常用的計算 以下數(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++ 算法 高精度(較詳細.)

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

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

    2023年04月10日
    瀏覽(19)
  • (基礎算法)高精度加法,高精度減法

    (基礎算法)高精度加法,高精度減法

    什么叫做高精度加法呢?包括接下來的高精度減法,高精度乘法與除法都是同一個道理。正常來講的話加減乘除,四則運算的數(shù)字都是整數(shù),也就是需要在int的范圍之內(nèi),但當這個操作數(shù)變得非常\\\"大\\\"的時候( 其實就是一個字符串,比方說有一個數(shù)是20位,如果用整數(shù)視角來

    2024年02月01日
    瀏覽(93)
  • C++高精度問題

    C++高精度問題

    C++中int不能超過2^31-1,最長的long long也不能超過2^63-1,所以我們在題目中如果碰到了很長很長的數(shù),并且需要進行大數(shù)運算時,就需要高精度存儲。 由于int和long long的限制,我們要想存放很長的數(shù)就需要利用數(shù)組存儲,C++中可以利用STL中的vector容器存儲 讀?。??由于數(shù)據(jù)很大,

    2024年01月24日
    瀏覽(24)
  • C++實現(xiàn)高精度減法

    一、問題描述: ? ? ? ?高精度算法是處理大數(shù)字的數(shù)學計算方法。在一般的科學計算中,會經(jīng)常算到小數(shù)點后幾百位或者更多,當然也可能是幾千億幾百億的大數(shù)字。一般這類數(shù)字我們統(tǒng)稱為高精度數(shù),高精度算法是用計算機對于超大數(shù)據(jù)的一種模擬加,減,乘,除,乘方

    2024年02月14日
    瀏覽(28)
  • 算法筆記——高精度算法(附源碼)

    算法筆記——高精度算法(附源碼)

    ??作者介紹:22級樹莓人(計算機專業(yè)),熱愛編程<目前在c++階段, 因為最近參加新星計劃算法賽道(白佬),所以加快了腳步,果然急迫感會增加動力 ——目標Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線程,會持續(xù)分享學習成果和小項目的 ??作者主頁:熱愛編程的

    2023年04月08日
    瀏覽(91)
  • 【算法】模擬,高精度

    【算法】模擬,高精度

    ? P1601 A+B Problem(高精) - 洛谷 | 計算機科學教育新生態(tài) (luogu.com.cn) 思路就是模擬,值得注意的就是要用字符串類型輸入。存進自己的int數(shù)組時要倒著存,因為如果是正著存的話,進位會有點trouble。 時間復雜度O(max(m,n)) ?? P1303 A*B Problem - 洛谷 | 計算機科學教育新生態(tài) (lu

    2024年02月09日
    瀏覽(85)
  • 高精度算法詳解

    高精度算法詳解

    首先要知道為什么需要高精度算法: 高精度算法是 處理大數(shù)字 的數(shù)學計算方法,當數(shù)字過大不能用 int 和 long long 存儲時,我們就可以 使用string和vector類型 來存儲他們的每一位,然后進行計算。 我們可以先把要輸入的兩個數(shù)字放到vector中存儲,注意要 反著存(后邊做加法

    2024年01月17日
    瀏覽(93)
  • 高精度算法筆記·····························

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

    加法 減法 乘法 除法 高精度加法的步驟: 1.高精度數(shù)字利用字符串讀入 2.把字符串 翻轉(zhuǎn) 存入兩個整型數(shù)組A、B 3.從低位到高位,逐位求和,進位,存余 4.把數(shù)組C從高位到低位依次輸出 ????????1.2為準備 ? ? ? ? 3為加法具體實現(xiàn)(0按位取反為-1,即-1時結(jié)束等價于=0) ?

    2024年01月21日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包