洛谷 訓練場 高精度演算法

2022-04-29 20:00:16 字數 1736 閱讀 4564

今天練習的是高精度演算法篇:

前三題都是關於高精度演算法的加法、減法與乘法運算模板題,推薦以下部落格學習:

既然ac了前三題,那麼下面兩題應該也不成問題了:

p1255數樓梯

題意:樓梯上有n階,上一樓可以一步上一階,也可以一步上二階。

編乙個程式,計算共有多少種不同的走法。

分析:運用斐波那契數列的思想:

當n=1時,只有一種辦法,就是走一階;

當n=2時,有兩種辦法,①:兩次有一階;②:一次走兩階;

當n=3時,其辦法數等於n=1時與n=2時的方法數的總和,因為當n=1時,下一步走2階就達到第3級,當n=2時,下一步走1階時就達到第3級;

然後以此類推……

因為n<=5000,用long long也會爆資料的,所以要用高精度的加法,只需要在模板的基礎上增添string即可。

題目坑點在於測試點會測試n=0的情況,只需要特判以下n!=0就可以解決。

我這裡使用了打表。

1 #include2 #include3 #include

4 #include5

using

namespace

std;67

string str[5005];8

int a[5000], b[5000];9

intn;

1011

void

solve()

1231 len++;

32while(a[len] == 0 && len > 1) len--;

33for(int i = len; i >= 1; i--)36}

37}3839

intmain()

4046

return0;

47 }

ac**

p1604 b進製星球

題意:輸入乙個b,表示接下來你輸入的兩個數字的以及兩數之和的進製。

分析:高精度加法運算,只需要在原先思維(10進製)的基礎上增加乙個b代表b進製,解決字串上0~9與a~z的初始化與輸出時的轉化就很好解決。

1 #include2 #include3 #include

4 #include5

using

namespace

std;67

string

str1, str2;

8int a[2002], b[2003];9

intb;

1011

intmain()

1225

for(int i = 1; i <= b[0]; i++)

3132

int len = a[0] > b[0] ? a[0] : b[0

];33

for(int i = 1; i <= len; i++)

38 len++;

39while(a[len] == 0 && len > 1) len--;

40for(int i = len; i >= 1; i--)

46 cout <

48return0;

49 }

ac**

最後小結:

高精度的加減乘法的思維感覺就像小學算數時列的豎式,有這樣的思想就很好辦。

非常感謝前輩們的學習筆記!

P1101 單詞方陣(洛谷訓練場)題解

輸出演算法分析 解題標程 給一n n的字母方陣,內可能蘊含多個 yizhong 單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用 代替,以突出顯示單詞。例如 輸入 8輸出 q...

洛谷 演算法1 1 模擬與高精度 桌球

題目背景國際乒聯現在主席沙拉拉自從上任以來就立志於推行一系列改革,以推動桌球運動在全球的普及。其中1111分制改革引起了很大的爭議,有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位,他退役之後走上了桌球研究工作,意圖弄明白1111分制和2121分制對選手的不同影響。在開展他的研究之前,他...

高精度減法模板(洛谷2142)

洛谷p2142 1 luogu2142,不壓位的高精度減法 2 include 3 include 4 include 56 using namespace std 78 const int max n 11000 9 10int a max n b max n c max n 11string x...