高精度演算法整理

2021-10-03 03:32:57 字數 3807 閱讀 7892

洛谷p1601

高精度加法

#include

//用字串類處理長數

#include

using

namespace std;

string add

(string str1,string str2)

else

len1=str1.

length()

;int cf=

0,temp;

for(

int i=len1-

1;i>=

0;i--)if

(cf!=

0) str=

char

(cf+

'0')

+str;

//進製不為零

return str;

}int

main()

//缺陷是不能進行負數相加

這是直接對字串進行的處理,還可用陣列。

#include

#include

using

namespace std;

#define maxn 1050

string a,b;

int na[maxn]

,nb[maxn]

,ans[maxn]

;int

main()

else ans[i]

=na[i]

+nb[i];}

if(na[max1+1]

!=0) cout<;for

(int i=max1;i>

0;i--

) cout<;return0;

}

還有乙個從大佬那學來的超級方法,可以處理負數

高精度減法

#include

#define maxn 10500

using

namespace std;

string a, b;

string _add

(string a, string b)

//高精度相加 (為底下a或b為負數相減做鋪墊)這個都會吧。

, nb[maxn]

=, ans[maxn +1]

=;for(

int i = a.

size()

; i >

0; i --

)na[i]

= a[a.

size()

- i]

-'0'

;for

(int i = b.

size()

; i >

0; i --

)nb[i]

= b[b.

size()

- i]

-'0'

;int maxl =

max(a.

size()

, b.

size()

);for(

int i =

1; i <= maxl; i ++

)//相加

if(ans[maxl +1]

!=0)sum +

="1"

;//特判 防止最大位進製

for(

int i = maxl;i >

0; i --

)sum +

= ans[i]

+'0'

;return sum;

}string _minus

(string a, string b)

, nb[maxn]

=, ans[maxn]=;

string diff;if(

(a < b && a.

size()

<= b.

size()

)|| b.

size()

> a.

size()

)return

"-"+

_minus

(b, a)

;for

(int i = a.

size()

; i >

0; i --

)na[i]

= a[a.

size()

- i]

-'0'

;for

(int i = b.

size()

; i >

0; i --

)nb[i]

= b[b.

size()

- i]

-'0'

;int maxl =

max(a.

size()

, b.

size()

);for(

int i =

1; i <= maxl; i ++

) ans[i]

= na[i]

- nb[i];}

while

(ans[maxl]==0

)maxl --

;//防止減後降位,多輸出若干0

if(maxl <1)

return

"0";

for(

int i = maxl; i >

0; i --

)diff +

= ans[i]

+'0'

;//陣列轉化為字串。

return diff;

}int

main()

else

if(a[0]

=='-'

)//只有a為負數

else

if(b[0]

=='-'

)//只有b為負數

else cout <<

_minus

(a, b)

;return0;

}

高精度乘法

#include

#include

using

namespace std;

#define maxn 10050

int na[maxn]

,nb[maxn]

,c[maxn]

;int

main()

int len=a.

size()

+b.size()

;for

(int i=

1;i(c[i]

>9)

while

(c[len]==0

&&len>

1) len--

;for

(int i=len;i>

0;i--

) cout<;return0;

}

高精度除法暫時還不會。。

洛谷對角線

#include

#include

using namespace std;

intmain()

素數

素數模板

bool is_prime

(int n)

埃尼斯託尼斯篩法

int prime[maxn]

;void

prime

(int maxn)

}

演算法 高精度乘法2(高精度乘高精度)

題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...

高精度演算法 791 高精度加法

給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...

高精度演算法

任務 高精度,計算大數乘小數 引數 乘法函式mul引數為 被乘數a,儲存最終結果的ans陣列,乘數b 結果 ans陣列中ans 0 為最高位,以此類推 include include using namespace std void mul char a,char ans,int b 任務 高精度,...