链接:https://leetcode.cn/problems/add-to-array-form-of-integer
题目:
整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。
给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。
先比较两个数谁大谁小,需要一个变量记录最大的数有几位:len
两数相加最可能多进一位,所有要定义一个数组大小为len+1;
取变量ret=两数个位相加,判断ret是否>9;
如果>
用一个变量记录next=1;
且只取ret的个位
否则next=0;
再将ret的值给数组的第一位
再次进入循环,ret=next+十位相加
后面同理,
最后再将数组翻转
写完后发现,num数组存在num[-1]的情况,处理:用一个数来接受num的值,
如果numSize-1<0,k与0相加
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
int knum = k;
int reti = 0,next=0;
int ret = 0;
//写出k的位数,记作kSize
int kSize = 0;
while (knum)
{
kSize++;
knum /= 10;
}
//比较两数谁大
int len = kSize > numSize ? kSize : numSize ;
int* retArr = (int*)malloc(sizeof(int) * (len + 1));//开辟一个数组,考虑到进位,数组大小要比最大数大小多一位
assert(retArr);
//相加
while (len--)
{
int a = 0;
if (numSize - 1 >= 0)
{
a = num[numSize - 1];
numSize--;
}
ret = k % 10 + a + next;
if (ret>9)
{
next = 1;
ret %= 10;
}
else
{
next = 0;
}
retArr[reti] = ret;
reti++;
k /= 10;
}
if (next == 1)
{
retArr[reti] = 1;
reti++;
}
//翻转数组
int left = 0, right = reti - 1;
while (left < right)
{
int tmp = retArr[left];
retArr[left] = retArr[right];
retArr[right] = tmp;
++left;
--right;
}
*returnSize=reti;
return retArr;
}