【力扣】989. 数组形式的整数加法

链接: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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值