Получить числовое значение из векторных позиций - PullRequest
0 голосов
/ 02 октября 2018

Я новичок здесь и на самом деле

У меня в голове проблема, и это так:

Я получаю входной сигнал вектора любого размера, но дляв этом случае, давайте возьмем это:

vetor = {1, 2, 3, 4}

Теперь все, что я хочу сделать, это взять эти числа и сложить каждое из них (учитывая, что это единица, десятки, сто, тысячи) и зарегистрировать результат вцелочисленная переменная, для случая 'int vec_value'.

Учитывая вектор, указанный выше, ответ должен быть: vec_value = 4321.

Я оставлю main.cpp прикрепленным к сообщениюОднако я расскажу вам, как я рассчитал результат, но он дал мне неправильный ответ.

vetor[0] = 1

vetor[1] = 2

vetor[2] = 3

vetor[3] = 4

результат должен быть = (1 * 10 ^ 0) + (2 * 10 ^1) + (3 * 10 ^ 2) + (4 * 10 ^ 3) = 1 + 20 + 300 + 4000 = 4321.

Программа дает мне решение как 4320, и еслиЯ изменяю значения случайным образом, ответ следует за новыми значениями, но с неправильными числами.

Если бы кто-нибудь мог взглянуть на мой код, чтобы увидеть, что я делаю неправильно, я быочень ценю!

Спасибо ..

В конце поста есть ссылка на изображение, показывающее пример неправильного результата.Имейте в виду, что иногда программа дает мне правильный ответ (что делает меня более запутанным)

Код:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <cmath>

using namespace std;

int main()
{
    vector<int> vetor;

    srand(time(NULL));
    int lim = rand() % 2 + 3; //the minimum size must be 3 and the maximum must be 4
    int value;

    for(int i=0; i<lim; i++)
    {
        value = rand() % 8 + 1; // I'm giving random values to each position of the vector
        vetor.push_back(value);
        cout << "\nPos [" << i << "]: " << vetor[i]; //just to keep in mind what are the elements inside the vector
    }

    int vec_value=0;

    for(int i=0; i<lim; i++)
    {
        vec_value += vetor[i] * pow(10, i); //here i wrote the formula to sum each element of the vector with the correspondent unity, tens, hundreds or thousands
    }

    cout << "\n\nValor final: " << vec_value; //to see what result the program will give me

    return 0;
}

Пример программы

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте это для основного цикла:

int power = 1;
for(int i=0; i<lim; i++)
{
    vec_value += vetor[i] * power;
    power *= 10;
}

Таким образом, все вычисления выполняются в целых числах, на вас не влияет округление с плавающей запятой.

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