Code:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void process(vector<char> &n) {
while (n.size() > 1) {
for (size_t i = 0; i < n.size(); ++i) {
if (n[i] == 0) {
n.clear();
return;
}
}
vector<char> n1;
n1.push_back(1);
for (size_t i = 0; i < n.size(); ++i) {
int digit = n[i];
for (size_t j = 0; j < n1.size(); ++j) {
n1[j] *= digit;
}
char carry = 0;
for (size_t j = 0; j < n1.size(); ++j) {
char value = n1[j] + carry;
carry = value / 10;
n1[j] = value - 10*carry;
}
if (carry > 0) {
n1.push_back(carry);
}
}
n = n1;
}
}
int main() {
string input;
cin >> input;
vector<char> n;
for (int i = input.size() - 1; i != -1; --i) {
n.push_back(input[(size_t) i] - '0');
}
process(n);
if (n.empty()) {
cout << "0";
} else {
for (int i = n.size() - 1; i != -1; --i) {
cout << ((int) n[(size_t) i]);
}
}
cout << endl;
return 0;
}
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.