高精度加減乘除C C 實現 python實現

2021-09-18 02:16:26 字數 4099 閱讀 3479

[高精度加法]例題

二、藍橋杯基礎練習 高精度加法

[高精度減法]模板(c++)

[高精度乘法]模板c++

高精度除法

p601洛谷

a+b problem(高精)

題目背景

無題目描述

高精度加法,x相當於a+b problem,b不用考慮負數。

輸入輸出格式

輸入格式:

分兩行輸入a,b<=10^500

輸出格式:

輸出只有一行,代表a+b的值

輸入輸出樣例

輸入樣例#1:

1

1

輸出樣例#1

1
#include

using namespace std;

int a[

501]

,b[501];

//長度是位數

void

add(string s1,string s2)

else

//否則不進製

c=0;

j++;}

int k=

max(len1,len2)

;while

(a[k]==0

&&k>=1)

//k>=1一定要加啊

k--;//去掉後面的0 即max位如果是0 則去掉

for(j=k;j>=

0;j--

) s[j]

=a[k-j]

+'0'

; s[k+1]

='\0'

;printf

("%s\n"

,s);

//for(i=0;i<=k;i++)

//printf("%c",s[i]);

// printf("\n");

return;}

intmain

(void

)

python:由於python的int是無長度限制的資料型別,理論上是無限長。所以python的高精度對於c++/c語言來說就像玩的一樣。

ac**:

a =

input()

b =input()

print

(int

(a)+

int(b)

)

不過時間複雜度上,c++/c更快

資源限制

時間限制:1.0s 記憶體限制:512.0mb

問題描述

輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。

演算法描述

由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。

定義乙個陣列a,a[0]用於儲存a的個位,a[1]用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。

計算c = a + b的時候,首先將a[0]與b[0]相加,如果有進製產生,則把進製(即和的十位數)存入r,把和的個位數存入c[0],即c[0]等於(a[0]+b[0])%10。然後計算a[1]與b[1]相加,這時還應將低位進上來的值r也加起來,即c[1]應該是a[1]、b[1]和r三個數的和.如果又有進製產生,則仍可將新的進製存入到r中,和的個位存到c[1]中。依此類推,即可求出c的所有位。

最後將c輸出即可。

輸入格式

輸入包括兩行,第一行為乙個非負整數a,第二行為乙個非負整數b。兩個整數都不超過100位,兩數的最高位都不是0。

輸出格式

輸出一行,表示a + b的值。

樣例輸入:

20100122201001221234567890

2010012220100122

樣例輸出:

20100122203011233454668012
上面的模板1其實就是初學的時候模範別人打的有點亂,但是原理清楚,建議用這個作為參考。

#include

#include

#include

#include

using namespace std;

char a[

105]

;char b[

105]

;int sum[

150]

;void

solve()

while

(sum[k]==0

&&k>

0) k--

;for

(int i=k;i>=

0;i--

)printf

("%d"

,sum[i]);

printf

("\n");

return;}

intmain

(void

)

洛谷p2142

#include

#include

#include

#include

using namespace std;

bool compare

(string a,string b)

void

subtraction

(string a,string b)

sa[j]-=

1;if(sa[j]==0

&&j==len-

1) len--

; z+=10

;}c[i]

=z;}

int k=len-1;

while

(k>

0&&c[k]==0

) k--

;for

(int i=k;i>=

0;i--

)printf

("%d"

,c[i]);

printf

("\n");

return;}

intmain

(void

)subtraction

(a,b)

;return0;

}

或許題解中的另乙個方法更簡單,但是上面**更符合我們日常習慣吧。

高精度除法要用到高精度減法,其中減法用於試商,而不是用高精度乘法。

高精度除法還沒打,就用了一下其他博主的**塊,理清楚思路,相信能自己敲出來

步驟如下:

1、將除數和被除數對齊,被除數字數不夠時,補0。

2、利用被除數減去除數,一直減到被除數小於除數,減的次數,就是「試商」的結果,每減一次當前位結果就加乙個。

3、重複上述步驟,一直到被除數和除數的位數相等為止(求得餘數)或者達到某一精度要求。

高精度加減乘除

一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...

高精度加 減 乘 除演算法實現

在說高精度加減乘除運算之前,我們先搞明白什麼是高精度運算?實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如 求兩個100位...

高精度演算法,加減乘除

高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...