向输入int向量加1,然后再次返回向量的答案

问题描述 投票:0回答:1
#include <cmath>
#include <vector>
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        vector<int>result;
        unsigned long long c =0,answer;
        for (int i=0; i<digits.size(); i++){
            c = pow(10, i)*(digits[digits.size()-1-i]) + c;
            //cout<<"loop"<<endl;
        }
        answer = c+1;
        while (answer){
            result.insert(result.begin(),answer%10);
            answer = answer/10;
        }

        return result;
    }
};

长向量时出现错误。例如:对于测试用例,[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]我的代码给出的输出为[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,4,0,9]最后三位数字错误

c++ vector
1个回答
0
投票

[如果有人要求您将一个数字加大,您会使用pow功能吗?明显不是。这就是您应该如何编写函数的方法

vector<int> plusOne(const vector<int>& digits) {
    vector<int> result = digits;
    int carry = 1;
    int i = digits.size() - 1;
    while (i > 0 && carry) {
        ++result[i];
        if (result[i] < 10)
            carry = 0;
        else
            result[i] = 0;
        --i;
    }
    if (carry)
        result.insert(result.begin(), 1); // overflow, e.g. 9999 => 10000
    return result;
}

未经测试的代码。

© www.soinside.com 2019 - 2024. All rights reserved.