此演算法均是用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 提交 狀態 討論版 話說乾隆帶著他的宰相劉羅鍋和你出巡江南,被杭州城府邀請去聽戲,至於什麼戲,那就不知了。乾隆很高興,撒酒與君臣共享。三更欲回住處,可是乾隆這人挺怪,他首先要到西湖邊散散步,而且命令不准有人跟著他。小醉,步于西湖岸...