Добавляем 1 во входной вектор int и снова возвращаем ответ в векторе - PullRequest
0 голосов
/ 25 марта 2020
#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] последние три цифры неверны

1 Ответ

0 голосов
/ 25 марта 2020

Если бы кто-то попросил вас добавить один к большому числу, вы бы использовали функцию 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;
}

Непроверенный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...