对于非负整数 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
解题思路
代码以及相关注释
int* addToArrayForm(int* A, int ASize, int K, int* returnSize)
{
//计算存储结果数组retArr的大小
int num = K;
//具体多大,要看A和K哪个大
//计算K的大小
int KSize = 0;
while (num)
{
++KSize;
num = num / 10;
}
//比较A和K,将大的赋值给n,+1是因为,后面可能会进位,所以多给一个
int n = KSize > ASize ? KSize + 1 : ASize + 1;
int* retArr = malloc(sizeof(int)*n);
int Ai = ASize - 1;
int Knum;
int next = 0;//进位
int reti = 0;
//判断:同时结束才结束,有一个没结束,依然继续所以用 ||
while (Ai >= 0 || K > 0)
{
//从整形和数组中分别取要加的值
Knum = K % 10;
K = K / 10;
int Anum = 0;
if (Ai >= 0)
{
Anum = A[Ai--];
}
int ret = Anum + Knum + next;
;
if (ret>=10)
{
next = 1;
ret = ret - 10;
}
else
{
next = 0;
}
retArr[reti] = ret;
reti++;
}
//最后一个进位
if (next == 1)
{
retArr[reti++] = 1;
}
//输出型参数
*returnSize = reti;
//逆置
int left = 0;
int right = reti - 1;
while (left < right)
{
int tmp = retArr[left];
retArr[left] = retArr[right];
retArr[right] = tmp;
left++;
right--;
}
return retArr;
}