Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <algorithm>
- #include <cstdlib>
- #include <cstdio>
- #include <string>
- #include <vector>
- typedef std::vector<int> lnum;
- const int base = 1000 * 1000 * 1000;
- void print(lnum a) {
- bool flag = false;
- FILE *fout = fopen("output.txt", "a");
- // fprintf(fout, "\n");
- for (int i = a.size() - 1; i >= 0; i--)
- if ((a[i] != 0) || (a[i] == 0 && flag == 1)) {
- if (flag == 0) {
- flag = true;
- fprintf(fout, "%d", a[i]);
- } else
- fprintf(fout, "%09d", a[i]);
- }
- }
- lnum toVec(std::string &str) {
- lnum toReturn;
- for (int i = (int) str.length(); i > 0; i -= 9)
- if (i < 9)
- toReturn.push_back(atoi(str.substr(0, i).c_str()));
- else
- toReturn.push_back(atoi(str.substr(i - 9, 9).c_str()));
- return toReturn;
- }
- void multiply(lnum a, lnum b) {
- lnum c(a.size() + b.size());
- for (size_t i = 0; i < a.size(); ++i)
- for (int j = 0, carry = 0; j < (int) b.size() || carry; ++j) {
- long long cur = c[i + j] + a[i] * 1ll * (j < (int) b.size() ? b[j] : 0) + carry;
- c[i + j] = int(cur % base);
- carry = int(cur / base);
- }
- while (c.size() > 1 && c.back() == 0)
- c.pop_back();
- print(c);
- }
- int main() {
- using namespace std;
- ifstream cin("input.txt");
- ofstream cout("output.txt");
- string first, second;
- lnum firstLnum, secondLnum;
- long long b;
- cin >> first >> second >> b;
- firstLnum = toVec(first);
- secondLnum = toVec(second);
- multiply(firstLnum, secondLnum);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement