簡單的演算法問題7 加一(高精度的演算法)

2021-08-02 21:54:07 字數 1515 閱讀 6836

此演算法均是用c++編寫

此題目均是來自計蒜客

這道題如果沒有分析清楚有多種情況絕對吃藕!

陣列內存放了一些個位數字,組成乙個大數(從高位到低位),現在將這個數加 11,並輸出加一以後的結果。

例如:

a = [2,3,1,1,4]

則結果為 [2,3,1,1,5]。

a = [7,8,9]

則結果為 [7,9,0]。

第一行輸入乙個正整數 n(1≤n≤100),接下來的一行,輸入用空格分隔的 n個 0 到 9 的非負整數組成的陣列 a[n]。

輸出一行,n 個用空格分隔的整數,表示加一後的新陣列。

形如:

樣例輸入

5 8 9 9 9 9

樣例輸出

9 0 0 0 0

這道題我分了三種情況來討論

1.個位數不是9,即不用進製的直接可以用a[i]=a[i]+1;

2.個位數是9,還得進製(有可能十位數也是9,也進製)這種我就把它是9的位數全部抹掉了a[i]=0;再在最前一位不是9的位加一a[i]=a[i]+1;

3.第三種是最難想到的,因為我測試的時候都沒有考慮到這種情況,但是老是又通不過,我以為是編譯器壞掉了,嚇得我趕緊關掉了**(我以為我的電腦很low,每天被我用來放**,硬體被燒壞了,導致了一系列的bug~~)

( ¯ □ ¯ )

(騙你們的,其實編譯器哪有那麼脆弱,硬體燒壞倒是有可能,但是我沒有做過實驗不知道硬體能承受最大的溫度是多少,可能每個硬體的所能承受的最大溫度都不一樣,以上是我的拙見,有可能跟真正的電子硬體的知識有些出入)

扯遠了,現在繼續說,這種情況就是所有的位數都是9,你得從最開始就進製,如果你用的是一般的陣列,int 這樣的那麼恭喜你,你可能還得再寫乙個陣列來做,一般這種動態的陣列都用vector。先新增一位,再將以前所有位設為0,第一位設為1。

#include 

#include

using

namespace

std;

a,int n);

int main()}}

return0;}

a,int n)

else

}if(a[0]==0)

for(int i=0;icout}}

1.對於第一種情況

2.對於第二種情況

3.對於第三種情況

測試成功~!

計蒜客 加一(高精度問題)

陣列內存放了一些個位數字,組成乙個大數 從高位到低位 現在將這個數加 1 1,並輸出加一以後的結果。例如 a 2,3,1,1,4 a 2,3 1,1 4 則結果為 2,3,1,1,5 2 3,1 1,5 a 7,8,9 a 7,8 9 則結果為 7,9,0 7 9,0 第一行輸入乙個正整數 n 1 ...

c 加法高精度演算法的簡單實現

c 高精度演算法,對於新手來說還是一大挑戰,只要克服它,你就開啟了程式設計的新篇章,演算法。我發的這個 並不是很好,占用記憶體很多而且執行時間很長 不超過1秒 但是很好理解,很適合新手 高精演算法的本質就是把陣列程式設計字串,然後將字串像豎式一樣加起來 a b高精度演算法 include inclu...

高精度算r的n次方 問題 H 乾隆巡江南

時間限制 2 sec 記憶體限制 128 mb 提交 13 解決 3 提交 狀態 討論版 話說乾隆帶著他的宰相劉羅鍋和你出巡江南,被杭州城府邀請去聽戲,至於什麼戲,那就不知了。乾隆很高興,撒酒與君臣共享。三更欲回住處,可是乾隆這人挺怪,他首先要到西湖邊散散步,而且命令不准有人跟著他。小醉,步于西湖岸...