Решение задачи Длинное произведение с Acmp

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


Даны целые неотрицательные числа M и N. Требуется найти произведение этих чисел.

Код

#include <iostream>
#include <string>
 
 
using namespace std;
 
 
string sumStr(string a,string b)
{
    string r,tt;
    if(a.size() < b.size())
        return sumStr(b,a);
    while(b.size() < a.size())
        b.insert(0,"0");
    int t = 0;
    for(int i = a.size() - 1; i >= 0; --i){
        t+=a[i] + b[i] - 96;
        tt = t % 10 + 48;
        r.insert(0,tt);
        t /= 10;
    }
    if(t){
        tt = t + 48;
        r.insert(0,tt);
    }
    return r;
}
string multStr(string a,string b)
{
    string r = "0";
    if(a.size() < b.size())
        return multStr(b,a);
    int cc = 0;
    while(b.size() > 0){
        int k = 0,tt,ttt = 1;
        for(int i = 0; b.size() > 0 && i < 5; ++i){
            tt = (b[b.size() - 1] - 48) * ttt;
            k+=tt; ttt*=10;
            b.erase(b.size() - 1,1);
        }
        int t = 0; string conv, temp = "";
        for(int i = a.size() - 1; i >= 0; --i){
            t+=(a[i] - 48) * k;
            conv = t % 10 + 48;
            if (k)
                temp.insert(0,conv);
            t /= 10;
        }
        if(t){
            while(t){
                conv = t % 10 + 48;
                t /= 10;
                temp.insert(0,conv);
            }
        }
        for(int i = 0; i < cc; ++i)
            temp.insert(temp.size(),"00000");
        r = sumStr(r,temp);
        ++cc;
    }
    return r;
}
int main()
{
    string a,b;
    cin >> a >> b;
    string str = multStr(a,b);
    cout << str << endl;
    return 0;
}

         

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




Комментарии

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