陣列形式的加法 C語言實現

2021-10-11 18:18:12 字數 2520 閱讀 6945

前言

一道比較有意思的題。要求利用陣列儲存數字來完成加法運算。

對於非負整數 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 ...