美文网首页
上交OJ-1015. 高精度乘法

上交OJ-1015. 高精度乘法

作者: code猪 | 来源:发表于2018-05-20 19:24 被阅读16次

    1015. 高精度乘法


    Description

    输入2个整数a和b,输出a*b。

    Input Format

    输入有两行,第一行a,第二行b。

    0≤a,b≤2^1000。

    Output Format

    输出只有一行,a*b。

    Sample Input

    44
    3
    

    Sample Output

    132
    

    分析

    使用数组代替大数进行运算。

    #include <iostream>
    #include <vector>
    #include <stdio.h>
    
    using namespace std;
    
    void mux(vector<char> &a, int x, int address, vector<char> &c)
    {
        vector<char>::reverse_iterator it_ra;
        vector<char>::iterator it_c;
        char tmp_ia=0, tmp_ic=0;
        char a_1=0, a_10=0, a_all=0;
        
        for(it_ra=a.rbegin(), it_c=c.begin(), it_c+=address; it_ra!=a.rend(); it_ra++, it_c++) {
            a_all = *it_ra * x + a_10;
            a_10 = a_all/10;
            a_1 = a_all % 10;
            
            *it_c = *it_c + tmp_ic + a_1;
            if(*it_c > 9) {
                tmp_ic = *it_c / 10;
                *it_c = *it_c % 10;
            }
            else
                tmp_ic=0;
        }
        
        tmp_ic=tmp_ic+a_10;
        for(; it_c!=c.end() && tmp_ic!=0; it_c++) {
            *it_c = *it_c + tmp_ic;
            if(*it_c > 9) {
                *it_c = *it_c -10;
                tmp_ic=1;
            }
            else
                tmp_ic=0;
        }
    }
    
    int main()
    {
        char tmp_c;
        vector<char> a, b, c;
        vector<char>::reverse_iterator it_r, it_rc;
        int i;
        
        while((tmp_c=getchar())!='\n')
            a.push_back(tmp_c-'0'), c.push_back(0);
        while((tmp_c=getchar())!='\n')
            b.push_back(tmp_c-'0'), c.push_back(0);
        
        if(a.size()>b.size())
            for(it_r=b.rbegin(), i=0; it_r!=b.rend(); it_r++, i++)
                    mux(a, *it_r, i, c);
        else
            for(it_r=a.rbegin(), i=0; it_r!=a.rend(); it_r++, i++)
                    mux(b, *it_r, i, c);
        
        it_rc=c.rbegin();
        if(*it_rc!=0)
            cout<<int(*it_rc);
        it_rc++;
        for(; it_rc!=c.rend(); it_rc++)
            cout<<int(*it_rc);
        cout<<endl;
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:上交OJ-1015. 高精度乘法

          本文链接:https://www.haomeiwen.com/subject/ctwtjftx.html