数组形式的整数加法
问题:
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为[1, 2, 3, 1]
。
给定非负整数 X 的数组形式 A,返回整数 X + K 的数组形式。
思路:
例:
输入:A = [1, 2, 0, 0], K = 34
输出:[1, 2, 3, 4]
解释:1200 + 34 = 1234
- 判断数组长度是否为 0,为 0 则直接将余数添加到结果数组。
- 不为 0,则进行低位相加,如上 0 + 4,如不大于等于 10 则无进位,直接添加到结果数组,有进位将 K / 10 后加一用 K 来存储进位,再 0 + 3,依次进行下去。
如果 K 的长度大于数组长度,K 未除 10 到 0,或长度相等最后 K++ 了,则按第一步继续执行。- 将结果数组转置返回。
class Solution {
public:
vector<int> addToArrayForm(const vector<int>& A, int K) {
auto len = A.size();
vector<int> res;
if (len == 0) {
while (K > 0) {
res.push_back(K % 10);
K /= 10;
}
}
else {
while (len-- > 0) {
auto sum = A[len] + K % 10;
K /= 10;
if (sum >= 10) {
sum -= 10;
K++;
}
res.push_back(sum);
}
while (K > 0) {
res.push_back(K % 10);
K /= 10;
}
}
reverse(res.begin(), res.end());
return res;
}
};