0
点赞
收藏
分享

微信扫一扫

洛谷P1303高精度乘法

梦想家们 2022-04-21 阅读 31
c++

#include<iostream>
using namespace std;
#include<string>
#include<cstdio>
int a[2001], b[2001];
int d[4002];
int main()
{
    string s,y;
    cin >> s; cin >> y;
    //倒置储存
    int i, j;
    for (i = 0; i < s.size(); ++i)
    {
        a[i] = s[s.size() - i - 1] - '0';
    }
    for (i = 0; i < y.size(); ++i)
    {
        b[i] = y[y.size() - i - 1] - '0';
    }
    
    //分位数储存相乘值
    for (i = 0; i < s.length(); ++i)
    {
        for (j = 0; j < y.length(); ++j)
        {
            d[i + j ] = d[i + j ] + a[i] * b[j];
        }
    }
    /*for (i = 0; i < s.length() + y.length() - 1; ++i)
    {
        cout << d[i]<<endl;
    }*/
    //进位倒置
    int temp = 0;
    for (i = 0; i < s.length() + y.length(); ++i)
    {
        int t = d[i];
        d[i] = (d[i] + temp) % 10;
        temp = (t + temp) / 10;
    }
    
    //======
    

    //倒置
    for (i = 0; i < (s.length() + y.length()) / 2; ++i)
    {
        temp = d[i];
        d[i] = d[s.length() + y.length() - i - 1];
        d[s.length() + y.length() - i - 1] = temp;
    }
    
    //输出
    if (d[0] != 0)
    {
        
        for (i = 0; i < s.length() + y.length(); ++i)
        {
            cout << d[i];
        }
        
    }
    else if (d[0] == 0)
    {
        for (i = 0; i < s.length() + y.length(); ++i)
        {
            if (d[i] != 0)break;
        }
        if (i == s.length() + y.length())cout << "0";
        else
        {
            for (i; i < s.length() + y.length(); ++i)
            {
                cout << d[i];
            }
        }
        
    }

    return 0;
}

举报

相关推荐

0 条评论