大數加減,較大數階乘 高精度

2021-10-06 23:44:56 字數 3486 閱讀 6170

2.大整數減法

3.求10000以內n的階乘

10:大整數加法

描述:

求兩個不超過200位的非負整數的和。

輸入: 有兩行,每行是乙個不超過200位的非負整數,可能有多餘的前導0。

輸出: 一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。

樣例輸入:

22222222222222222222

33333333333333333333

樣例輸出:

55555555555555555555

a.純stl(string)實現:
#include

using

namespace std;

string add

(string a,string b)

//拷貝a字串到答案串

for(

int i =

0,t=

0; i < len;

++i)

reverse

(ans.

begin()

, ans.

end())

;//翻轉回來

return ans.

substr

(ans.

find_first_not_of

('0'))

;//這裡可能求和後沒有進製所以要去掉翻轉之後的前導0

}int

main

(int argc,

char

const

*ar**)

b.陣列實現:
#include

using

namespace std;

string a2,b2;

int a[

200]

,b[200

],c[

200]

;int

main()

//倒序轉整

for(

int i=

0;i) di=

max(m,n)

;for

(int i=

0;i(x>0)

for(

;c[di-1]

==0&&di>1;

) di--

;//去前導零

for(

int i=di-

1;i>=

0;i--

)return0;

}

c.陣列模組化實現:
#include

using

namespace std;

string sum_bigint

(string a2,string b2)

//倒序轉整

for(

int i=

0;i)int di=

max(m,n)

,x=0

;//數字位數:number of digits

for(

int i=

0;i(x>0)

//判最高位

for(

; c[di-1]

==0&&di>1;

) di--

;//去前導零

string s;

for(

int i=di-

1;i>=

0;i--

)//注意c是整形陣列

return s;

}int

main()

d.若改題為:兩數的最高位都不是0:
#include

#define fo(i,a,b) for(int i=a;iusing

namespace std;

intmain()

while

(temp)

reverse

(s.begin()

,s.end()

);cout

}

11:大整數減法:

描述:

求兩個大的正整數相減的差。

輸入: 共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多餘的前導零。

輸出: 一行,即所求的差。

樣例輸入:

9999999999999999999999999999999999999

9999999999999

樣例輸出:

9999999999999999999999990000000000000

a.陣列實現:
#include

using

namespace std;

string a,b;

int x[

999]

,y[999

],a,b,i,k,m;

main()

while

(x[k]==0

&&k>

1) k--

;//去除多餘的前導零

for(i=k;i>

0;i--

)cout<;}

b.陣列模組化實現:
#include

using

namespace std;

string sub_bigint

(string a,string b)

while

(x[k]==0

&&k>

1) k--

;//去除多餘的前導零

string s;

for(i=k;i>

0;i--

) s+

= x[i]

+'0'

;return s;

}main()

14:求10000以內n的階乘

描述:

求10000以內n的階乘。

輸入: 只有一行輸入,整數n(0<=n<=10000)。

輸出: 一行,即n!的值。

樣例輸入:

100樣例輸出:

933262154439441526816992.........(太多了,省略一下)

a.陣列實現:
//先預設結果有且僅有一位,是1 

#include

int a[

40000];

intmain()

//對每一位做乘法

while

(jw)

//進製

}for

(int i=w-

1;i>=

0;i--

)//逆序輸出

return0;

}

高精度之大數階乘

大數階乘 序言 今天是我寫部落格的第二天,差點忘了寫,反思一下,下次要早點發。大數階乘也是高精度題目中的入門題。它的主要思路和上一次我發的大數加法相似,也是以陣列來按位處理資料。他的難度級別應該比大數加法還低一點。他的輸入很簡單,也不需要定義多餘的輔助陣列。只需要將需要求階乘的數先輸入到陣列中。再將...

高精度大資料 階乘計算

問題描述 輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的...

9 大數,高精度計算 大數階乘

大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。階乘問題比較典型,...