Решение задачи "Длинное произведение" с Меньшиков

Без пояснения   Просмотров: 14


Даны целые неотрицательные числа M и N. Найти M*N.

Код

#include <iostream>
#include <string>
#include <cstring>
 
using namespace std;
 
const int max_len = 5100;
struct BigInt
{
    int digits[max_len];
    int amount;
    BigInt()
    {
        memset(digits,0,sizeof(digits));
        amount = 1;
    }
    void init(string &str)
    {
        memset(digits,0,sizeof(digits));
        amount = str.size();
        int pos = 0;
        for (int i=amount-1;i>=0;i--)
            digits[pos++] = str[i] - '0';
    }
    void input()
    {
        string str;
        cin>>str;
        init(str);
    }
    void output()
    {
        for (int i=amount-1;i>=0;i--)
            cout<<digits[i];
    }
};
int osn = 10;
BigInt operator * (const BigInt &a, const BigInt &b)
{
    BigInt res;
    int r = 0;
    for (int i=0;i<a.amount;i++){
        for (int j=0;j<b.amount | r;j++)
        {
            res.digits[i+j] += a.digits[i]*b.digits[j]+r;
            r = res.digits[i+j]/osn;
            res.digits[i+j] -= r * osn;
        }
    }
    int pos = a.amount + b.amount;
    while (pos>0 && !res.digits[pos])
        pos--;
    res.amount = pos + 1;
    return res;
}
int main()
{
    BigInt a,b,res;
    a.input();
    b.input();
    res = a*b;
    res.output();
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться