如題~
對于非負整數 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
示例 2:
輸入:A = [2,7,4], K = 181
輸出:[4,5,5]
解釋:274 + 181 = 455
示例 3:
輸入:A = [2,1,5], K = 806
輸出:[1,0,2,1]
解釋:215 + 806 = 1021
示例 4:
輸入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
輸出:[1,0,0,0,0,0,0,0,0,0,0]
解釋:9999999999 + 1 = 10000000000
提示:
1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
如果 A.length > 1,那么 A[0] != 0
在沒看到提示之前,我一度曾想過用暴力相加法!
但是!今天我看提示了,,,
然后,直接上代碼,
//1.知道K的長度
//2.陣列相加,逢十進一
//3.將陣列翻轉
int* addToArrayForm(int* A, int ASize, int K, int* returnSize) {
if(K == 0 )
{*returnSize = ASize;
return A;
}
int Ksize = 0,a;//1.定義K的長度
for(a=K;a>0;Ksize++)
{
a/=10;
}
int* returnX = malloc(sizeof(int) * fmax(Ksize+1, ASize + 1));//比較K和陣列的長度誰長
*returnSize = 0;//回傳長度初始為0;
for (int i = ASize - 1; i >= 0; --i) {//陣列相加
int sum = A[i] + K % 10;
K /= 10;
if (sum >= 10) {
K++;
sum -= 10;//2.開始逢十進一
}
returnX[(*returnSize)++] = sum;//一方面給returnSize++,一方面給陣列數值
}
for ( ; K > 0; K /= 10) //這里如果K的長度大于了A的長度,K主導,再加!
{
returnX[(*returnSize)++] = K % 10;
}
for (int i = 0; i < (*returnSize) / 2; i++) //可以看出,咱們之前的都是倒序,該改過來了!
{
int c = returnX[i];
returnX[i] = returnX[(*returnSize) - 1 - i];
returnX[(*returnSize) - 1 - i] = c;
}
return returnX;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252027.html
標籤:其他
上一篇:選項模式(option)
