
思路:这种题目的问题在于,你不能直接将数组转化成数字然后加减。因为测试用例里会有超出long long能表达的数字的数。一个数据结构装不下。因此只能老老实实各个数相加,算进位来做。代码不难,背住就好。
vector<int> addToArrayForm(vector<int>& num, int k)
{
vector<int> res;
int n = num.size();
//倒着遍历
for(int i = n - 1; i >= 0; --i)
{
int curSum = num[i] + k % 10;
k /= 10;
//若curSum>=10,则需要进位,下一个需要加的位+1,即k++
if(curSum >= 10)
{
k++;
curSum -=10;//同时保证放入res的都是小于10的数
}
res.push_back(curSum);
}
while(k > 0)//若k还剩下,全部加进去
{
res.push_back(k % 10);
k /= 10;
}
reverse(res.begin(), res.end());//反转后返回
return res;
}
本文讲解了一种处理大整数加减问题的算法,重点在于如何通过迭代处理每一位,确保进位并保持结果在数组形式下,适用于超出longlong范围的数值。通过倒序遍历、逐位相加和进位操作,实现高效的数组加法计算。
1229

被折叠的 条评论
为什么被折叠?



