Проблемы с типом данных, слишком маленький
Имеется калькулятор, который выполняет три операции:
Прибавить к числу X единицу. Умножить число X на 2. Умножить число X на 3. Определите кратчайшую последовательность операций, необходимую для получения из числа 1 заданное число N.
Входные данные Программа получает на вход одно число N, не превосходящее 106.
Выходные данные Выведите строку, состоящую из цифр "1", "2" или "3", обозначающих одну из трех указанных операций, которая получает из числа 1 число N за минимальное число операций. Если возможных минимальных решений несколько, выведите любое из них.
Ввод: 562340
вывод: 3333312222122213312
На этом тесте он ломается
Ввод: 1
вывод:
Ввод: 5
вывод: 121
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s;
vector <unsigned long long int> vec = { 1000000000000000000, 0, 1, 1 };
vector <unsigned long long int> a = { 1000000000000000000, 0, 1, 1 };
unsigned long long int p = 0;
unsigned long long int v = 0;
unsigned long long int t = 0;
unsigned long long int n = 0;
unsigned long long int c = 0;
unsigned long long int u = 0;
cin >> n;
for (int i = 4; i <= n; ++i) {
p = 0;
v = 0;
t = 0;
if (i % 3 == 0) { p = i / 3; }
if (i % 2 == 0) { v = i / 2; }
t = (i - 1);
c = min(min(vec[p], vec[v]), vec[t]);
//ищем что в с
if (c == vec[p]) { u = p; }
else if (c == vec[v]) { u = v; }
else { u = t; }
s += to_string(a[u]);
//понимаем какую операцию сделали
if ((i / 3) == u) { s += '3'; }
if ((i / 2) == u) { s += '2'; }
if ((i - 1) == u) { s += '1'; }
c++;
vec.push_back(c);
a.push_back(stoll(s));
s.clear();
}
cout << vec[n] << endl;
cout << a[n];
return 0;
}