藍橋杯練習 3 12

2021-10-22 00:11:16 字數 3676 閱讀 1103

• 高精度加法

資源限制

時間限制: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

樣例輸出

**實現

#include

#include

intmain()

else n = blen;

for(i =

0; i < n; i++)}

if(c[n]!=0

)else

return0;

}

❕注意:c++中,全域性閾只能宣告、初始化變數; 不能用於賦值、運算、呼叫函式等!!!也要注意,當兩數都是相同位數時,最後輸出的時候就不是n位了,而是n+1位• 階乘運算

資源限制

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

問題描述

輸入乙個正整數n,輸出n!的值。

其中n!=1 *2 * 3… * n。

演算法描述

n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a[0]表示a的個位,a[1]表示a的十位,依次類推。

將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的進製。

首先將a設為1,然後乘2,乘3,當乘到n時,即得到了n!的值。

輸入格式

輸入包含乙個正整數n,n

<=1000。

輸出格式

輸出n!的準確值。

思路根據演算法描述,我們構建乙個足夠大的陣列來存放這個大數的每一位,然後,我們用乙個for迴圈來迴圈我們要乘的數,因為數每一位(個位,十位,百位…)都要乘,所以要有第二個迴圈,來迴圈每乙個陣列元素,這裡需要用到進製,我們在每一輪乘數的開始,把進製初始為0,陣列當前開到的最大下標記為high = 0,我們每一組元素乘完i再加上低位的進製以後,只需%10保留個位填到當前陣列下標即可,然後進製數/10,一直到陣列最大下標,如果這個時候進製數還有,就說明要開陣列了,因為總數的位數又增加了。

**實現:

#include

using

namespace std;

const

int n =

100000

;int a[n]

;int n;

intmain()

while

(r)//因為進製可能不是乙個個位數,所以當當前可以開到的最大陣列個數都被填滿數字了以後,

//進製仍然不為0,就繼續開拓陣列,把進製乙個個往後面填上

}for

(int i = high; i >=

0; i--

)return0;

}

• g 螺旋折線(第九屆藍橋杯)

description

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。

對於整點(x, y),我們定義它到原點的距離dis(x, y)是從原點到(x, y)的螺旋折線段的長度。

例如dis(0, 1)=3, dis(-2, -1)=9

給出整點座標(x, y),你能計算出dis(x, y)嗎?

x和y對於40%的資料,-1000 <= x, y <= 1000

對於70%的資料,-100000 <= x, y <= 100000

對於100%的資料, -1000000000 <= x, y <= 1000000000

output

輸出dis(x, y)

思路

**本題我的思路是找規律,至於是找**的規律呢,我選擇的是幾個特殊點的位置,如上圖標記點位置,很容易的出a b c點的長度和座標的關係,e f g同理,a1 b1 c1 e1 f1 g1都是一樣的,然後再對座標x分類討論:

① 當x > 0時:(1) 當y > 0

(2)當y < 0

(3) 當y = 0

②當x < 0時:(1) 當y > 0

(2)當y < 0

(3) 當y = 0

③當x = 0時 …

分類討論,利用特殊點的規律,即可得出所有點的規律,注意long long 資料!

**實現(不完全對):

#include

#include

#include

using

namespace std;

long

long

dis(

long

long x,

long

long y)

else

if(x >0)

else

if(y >0)

else

if(y <0)

}else

if(x <0)

else

if(y >0)

if(y <

abs(x)

)return

pow((2

* x),2

)+2* x + x + y;

if(y >

abs(x)

)return

pow((2

* y),2

)- y + x;

}else

if(y <0)

}}intmain()

❕注意:注意函式型別為long long,傳入的引數型別也為long long

藍橋杯 練習(3 12)

時間限制 1.0s 記憶體限制 256.0mb 輸入正整數n,判斷從1到n之中,數字1一共要出現幾次。例如1123這個數,則出現了兩次1。例如15,那麼從1到15之中,一共出現了8個1。乙個正整數n 乙個整數,表示1出現的資料 n不超過30000 include using namespace st...

藍橋杯練習

k好數 問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入格式 ...

藍橋杯練習

題目完成時間2021年3月16日 題目 計算機真是最傻的東西 他都不能計算大於10 65 1的a b,請你幫這個 最傻 的東西過關,否則它就真的只認識1和0了。輸入格式 共兩行 第一行輸入乙個整數a 第一行輸入乙個整數b。輸出格式 共一行,乙個表示a b的整數。樣例輸入 2147483647 214...