前言
一道比較有意思的題。要求利用陣列儲存數字來完成加法運算。
對於非負整數 a 而言,a的陣列形式是每位數字按從左到右的順序形成的陣列。例如,如果 x = 1231,那麼其陣列形式為 [1,2,3,1]。
在遇到需要儲存很大的數字的時候,利用陣列來完成計算是乙個很巧妙的想法。
實現思路
首先乙個取巧的思路,將陣列裡的數遍歷成乙個數字。例如先將[1,2,3,4]改為1234,然後在計算。但是當這個數字很大的時候。超出了所有資料型別的上限。這樣做就會導致資料丟失。所以並不能是可取的。
第二種方法是將k值改為陣列形式。通過k對10取模得到每一位數字。然後逆序遍歷陣列來相加。
對於這樣乙個加法。需要考慮到的問題:
首先我們先考慮結果存放在**的問題。因為兩個位數相同的數相加,可能會產生乙個更高的進製。例如兩個四位數相加可能會是乙個五位數。但是加法進製始終只會是1。所以我們不能將結果存放在原陣列a中。
但是我們並不能事先知道兩個數相加是否會產生乙個更高的進製。所以在一開始時,需要開闢乙個在a和k中位數更多的數字的位數+1個空間用來預備存放我們的結果。
例如:a=[1,2,3,4] k=234 我們需要開闢乙個具有五個數字的陣列來預備存放我們的結果。
所以在一開始時,我們需要先算出k有多少位數字。然後和a比較。用來確定我們結果可能需要的大小。
int knum = k;
while
(knum)
int aksize =
(asize > ksize ? asize +
1: ksize +1)
;
然後逆序遍歷陣列實現每一位相加。這裡我們注意要多定義乙個進製,用來確定是否需要向更高位進1,以及我們是否需要利用我們多定義的那乙個空間。
// i=asize-1 用來表示陣列a的下標 carrybit為進製。初始值為0.
int* ak =
(int*)
malloc
(aksize *
sizeof
(int))
;while
(aksize-1)
else
//這裡意思是陣列a的數要比k小 此時更高位只有k;if(
*(ak + aksize -1)
>=10)
//判斷是否需要進製。
else
carrybit =0;
--aksize;
}
此時加法已經完成了。當程式退出這個迴圈後,此時carrybit的值就意味著最高位的加法是否會產生乙個進製。所以在退出迴圈後,我們在判斷carrybit是否是1 。 如果是1則說明有進製。否則的話將我們的結果陣列的頭指標向後移動乙個位置。然後陣列大小減一。
if
(carrybit ==0)
else
*ak =
1;
實現**
c語言實現**:
void
addtoarrayform
(int
* a,
int asize,
int k)
int aksize =
(asize > ksize ? asize +
1: ksize +1)
;int qwe = aksize;
int* ak =
(int*)
malloc
(aksize *
sizeof
(int))
;while
(aksize-1)
elseif(
*(ak + aksize -1)
>=10)
else
carrybit =0;
--aksize;}if
(carrybit ==0)
else
*ak =1;
for(
int aas =
0; aas < qwe;
++aas)
printf
("%d ",*
(ak + aas));
}
但是很尷尬的事這段**在力扣的答題介面並不能成功執行,但是我在vs上除錯是沒有問題的。我最後也沒有找到原因。猜測可能是編譯器的一些原因。
下面是通過c++完成的這道題,可以在力扣上通過。
class
solution
else
k /=10
;++index;
}reverse
(a.begin()
, a.
end())
;return a;}}
;
陣列形式的整數加法 C語言
不多bb,直接開整,今天我們來學一下大數的加減法,看完對您應該有所收穫。大數顧名思義就是乙個很龐大的數字,在各種語言中,系統自帶的變數型別是無法存放這樣的數字,所以我們需要自己想辦法,將這樣的數存起來,leetcode中有一道題就是如此,將起存放在乙個陣列當中。我們就先從乙個題目開始講起.整數的 陣...
C 陣列形式的整數加法
對於非負整數 x 而言,x 的陣列形式是每位數字按從左到右的順序形成的陣列。例如,如果 x 1231,那麼其陣列形式為 給定非負整數 x 的陣列形式 a,返回整數 x k 的陣列形式 示例 輸入 a k 806 輸入 a k 1 輸出 輸出 1,0 0,0 0,0 0,0 0,0 0 解釋 215 ...
C語言解法 陣列形式的整數加法
對於非負整數 x 而言,x 的陣列形式是每位數字按從左到右的順序形成的陣列。例如,如果 x 1231,那麼其陣列形式為 1,2,3,1 給定非負整數 x 的陣列形式 a,返回整數 x k 的陣列形式。示例 1 輸入 a 1,2,0,0 k 34 輸出 1,2,3,4 解釋 1200 34 1234 ...