C++ 将1添加到由数字数组表示的数字

C++ 将1添加到由数字数组表示的数字,c++,algorithm,math,vector,stl,C++,Algorithm,Math,Vector,Stl,问题如下: 给定一个表示为数字数组的非负数, 数字加1(增加数字表示的数字)。 存储数字时,最有效的数字位于列表的开头 解决方案: class Solution { public: vector<int> plusOne(vector<int> &digits) { reverse(digits.begin(), digits.end()); vector&l

问题如下:

给定一个表示为数字数组的非负数, 数字加1(增加数字表示的数字)。 存储数字时,最有效的数字位于列表的开头

解决方案:

 class Solution {
        public:
            vector<int> plusOne(vector<int> &digits) {
                reverse(digits.begin(), digits.end());
                vector<int> ans;
                int carry = 1;
                for (int i = 0; i < digits.size(); i++) {
                    int sum = digits[i] + carry;
                    ans.push_back(sum%10);
                    carry = sum / 10;
                }
                while (carry) {
                    ans.push_back(carry%10);
                    carry /= 10;
                }
                while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
                    ans.pop_back();
                }
                reverse(ans.begin(), ans.end());
                reverse(digits.begin(), digits.end());
                return ans;
            }
    };
为什么我们需要这个while循环?我试着对代码进行自评估,例如9999,但我无法理解从末尾弹出整数背后的逻辑! 请帮忙。

逻辑

while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
    ans.pop_back();
}
将值增加1后,删除末尾的任何0

逻辑是模糊的,不需要,因为您永远不需要在答案集中找到xyz..0000

逻辑构建器可能具有的示例:9999将被更改为0000100,因此他删除0以将转换转换为00001,该转换被反转为10000形式,但由于这种情况永远不会发生,因此应该从逻辑中删除代码

逻辑

while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
    ans.pop_back();
}
将值增加1后,删除末尾的任何0

逻辑是模糊的,不需要,因为您永远不需要在答案集中找到xyz..0000


逻辑构建器可能具有的示例:9999将被更改为0000100,因此他删除0以将转换转换为00001,该转换被反转为10000形式,但由于这种情况永远不会发生,因此应该从逻辑中删除代码

我也不认为这是必要的,除非
数字本身可以有前导零,但要求的答案不允许,没有意义,对吗?作为提示,像这样的案例,您可以简单地测试所有案例的0,1,2,…9,看看是否需要逻辑。由于多位数或单位数不是您的核心关注点(这里的携带数学显然是正确的),我认为没有必要这样做,除非
数字本身可以有前导零,但要求的答案不允许,没有意义,对吗?作为提示,像这样的案例,您可以简单地测试所有案例的0,1,2,…9并查看是否需要逻辑。因为多位数或单位数不是你的核心问题(这里的数学显然是正确的)