C 奧賽一本通刷題高精度題解

2021-08-14 15:27:08 字數 4683 閱讀 2388

title: c++奧賽一本通刷題記錄(高精度)

date: 2017-11-15

tags:

c++奧賽一本通刷題記錄(高精度)

2017.11.15 by gwj1139177410

大整數加法 openjudge10

//add template

#include

#include

#include

using

namespace std;

const

int maxn =

220;

int a[maxn]

, b[maxn]

, c[maxn]

;int

main()

}while

(c[0

]>

1&& c[c[0]

]==0)c[0]

--;for(

int i = c[0]

; i >=

1; i--

)cout<;return0;

}

大整數減法 openjudge11

//sub template

#include

#include

#include

using

namespace std;

const

int maxn =

220;

int a[maxn]

, b[maxn]

, c[maxn]

;int

main()

a[0]

= s1.

size()

; b[0]

= s2.

size()

;for

(int i =

1; i <= a[0]

; i++

)a[i]

=s1[a[0]

-i]-

'0';

for(

int i =

1; i <= b[0]

; i++

)b[i]

=s2[b[0]

-i]-

'0';

c[0]

=max

(a[0

],b[0]

)+1;

for(

int i =

1; i <= c[0]

; i++

) c[i]

= a[i]

-b[i];}

while

(c[0

]>

1&& c[c[0]

]==0)c[0]

--;for(

int i = c[0]

; i >=

1; i--

)cout<;return0;

}

計算2的n次方 openjudge12

//大數計算本質, 模擬即可

#include

using

namespace std;

const

int maxn =

110;

int a[maxn]

;int

main()

}}while

(a[0

]>

1&& a[a[0]

]==0)a[0]

--;for(

int i = a[0]

; i >=

1; i--

)cout<;return0;

}

大整數因子 openjudge13

//高精除低精,模板

#include

#include

using

namespace std;

const

int maxn =40;

int a[maxn]

, flag=1;

intmod

(int a,

int b)

return x;

}int

main()

}if(flag)cout<<

"none\n"

;return0;

}

求10000以內n的階乘 openjudge14

//高精乘低精,模板

#include

#include

using

namespace std;

const

int maxn =

50010

;//bugs:10000!得50000位啊

int a[maxn]

;void

mul(

int a,

int b)}}

intmain()

階乘和 openjudge15

//高精乘低精,高精加法,模板

#include

#include

#include

#include

using

namespace std;

const

int maxn =

50010

;int a[maxn]

, b[maxn]

, c[maxn]

;void

mul(

int a,

int b)}}

void

add(

int a,

int b)

//copy

a[0]

=max

(b[0

],c[0]

)+1;

for(

int i =

1; i <= a[0]

; i++)}

while

(a[a[0]

]==0&& a[0]

>

1)a[0]

--;}int

main()

for(

int i = a[0]

; i >=

1; i--

)cout<;return0;

}

大整數除法 openjudge09

//高精除高精,模板

#include

#include

#include

#include

using

namespace std;

const

int maxn =

220;

int a[maxn]

, b[maxn]

, c[maxn]

, t[maxn]

;int

compare

(int x,

int y)

return0;

}void

times

(int x,

int y,

int k)

intmain()

for(

int i =

1; i <= a[0]

; i++

)a[i]

= s1[a[0]

-i]-

'0';

for(

int i =

1; i <= b[0]

; i++

)b[i]

= s2[b[0]

-i]-

'0';

c[0]= a[0]

-b[0]+

1;for(

int i = c[0]

; i >

0; i--

) a[j]

-= t[j];}

while

(!a[a[0]

]&& a[0]

>

1)a[0]

--;}}

while

(!c[c[0]

]&& c[0]

>

1)c[0]

--;for(

int i = c[0]

; i >

0; i--

)cout<;return0;

}

除以13 openjudge27

//高精除低精,模板

#include

#include

using

namespace std;

const

int maxn =

110;

int a[maxn]

, c[maxn]

;int

main()

while

(!c[c[0]

]&& c[0]

>

1)c[0]

--;for(

int i = c[0]

; i >=

1; i--

)cout<; cout<<

"\n"

<"\n"

;return0;

}

一本通 高精度計算

加法進製 下標低位是個位,高位是十位 百位。輸出的時候倒著輸出。計算著時候必須先儲存個位 c i a i b i if c i 10 減法進製 a i b i if a i b i c i a i b i 乘法進製 看不懂,下面會解釋 e i j 1 c i d j e i j 1 新計算的值 累計...

資訊學奧賽一本通提高篇題解

感謝齊工大oj提供測試環境 1.1 貪心 活動安排 區間貪心,對於區間,按照右端點公升序排序,然後選擇離前乙個區間最近的不重合區間 種樹 對於區間,按照右端點公升序排序,讓樹盡量種在靠右的地方,用陣列標記狀態 噴水裝置 1.2 二分 憤怒的牛 最小值最大,二分距離mid 對於mid,如果距離大於mi...

《資訊學奧賽一本通》 位數問題 題解

時間限制 1000 ms 記憶體限制 65536 kb 提交數 3907 通過數 2025 在所有的n n位數中,有多少個數中有偶數個數字3 3 由於結果可能很大,你只需要輸出這個答案對12345 12345 取餘的值。讀入乙個數n n 1000 n n 1000 輸出有多少個數中有偶數個數字3 3...