В общем, мне надо сделать программу с длинной арифметикой. Проблема появилась на этапе считывания и переворота массива. Ко всем числам второго вектора добавляется последняя цифра из первого вектора
Например при введённых:
25565
9264
Получается:
5 6 5 5 2
45 65 25 95
Когда надо:
5 6 5 5 2
4 6 2 9
Также если поменять местами код с обработкой вектора1 и вектора2, то проблема появляется уже у первого, а не второго вектора.
Сам код:
#include <iostream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
string ia, ib;
vector<int> a;
vector<int> b;
getline(cin, ia);
getline(cin, ib);
for(int i = 0; i < ia.size(); i++) //Фигня через которую я превращаю строку в вектор цифр
{
char c[1] = { ia[i] }; //Берёт i-тый символ
a.push_back(atoi(c)); //Запихивает в конец вектора цифру
}
std::reverse(a.begin(), a.end()); //Переворачивает вектор. Длинка же
for(int i = 0; i < ib.size(); i++) //Аналогично, только для b
{
char c[1] = { ib[i] };
b.push_back(atoi(c));
}
std::reverse(b.begin(), b.end()); //Также
vector<int> r(fmax(a.size(), b.size()) + 1, 0); //Пока что эта строка не нужна
std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, " ")); cout << endl; //Вывод
std::copy(b.begin(), b.end(), std::ostream_iterator<int>(std::cout, " ")); cout << endl; //Вывод
return 0;
}
Ну что ж, в ответ на "как держать микроскоп, чтоб было удобнее забивать гвозди", отвечу именно на заданный вопрос...
Вот это
char c[1] = { ia[i] }; //Берёт i-тый символ
a.push_back(atoi(c)); //Запихивает в конец вектора цифру
замените на
a.push_back(ia[i]-'0');
Судя по всему, о том, что строка в C завершается нулевым символом, вам неизвестно?
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Дан ориентированный граф, нужно проверить есть ли в нем циклВершин до 10^5, поэтому дфс с рекурсией не зайдет
Упростил код, дабы было легче разобраться с проблемойИмеется класс, описанный в mainwindow