上交OJ-1015. 高精度乘法

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 
#include 
#include 

using namespace std;

void mux(vector &a, int x, int address, vector &c)
{
    vector::reverse_iterator it_ra;
    vector::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 a, b, c;
    vector::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<

你可能感兴趣的:(上交OJ-1015. 高精度乘法)