美文网首页
上交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. 高精度乘法

    1015. 高精度乘法 Description 输入2个整数a和b,输出a*b。 Input Format 输入有...

  • 高精度(加法&乘法&减法)

    高精度加法: 高精度乘法: 高精度减法:

  • 17-12-8版子

    高精度加法 高精度乘法 快速乘法 二分匹配 阶乘长度(Stirling公式) 并查集 树状数组 树状数组的逆序数 ...

  • 高精度乘法

    【例】高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位...

  • 高精度乘法

    问题 适用于1000位以内数的乘法 思路 注意两点: 数字是通过字符串传过来的,字符串的低位反而是数字的高位,所以...

  • 几个高精度模板

    模板来自洛谷及Acwing:Acwing洛谷 后续增加注释以及相关代码改进 高精度加法 高精度减法 高精度乘法 高...

  • 高精度数(大整数)乘法

    大整数乘法 上一期(高精度加法)今天我们来研讨一下高精度乘法。 题目描述:将两个大整数(最多100位)相乘,输出结...

  • 46 简单高精度乘法

    铐住修罗王和邪狼的魔法手铐镌刻着两行数字,修罗王猜测其开启密码是这两行数字的乘积,为此他需要编写一个简单高精度乘法...

  • 上交OJ-1014. 高精度加法

    1014. 高精度加法 Description 输入2个整数a和b,输出a+b。 Input Format 输入有...

  • noip模板整理

    数论快速幂高精度加法减法乘法除法线性筛素数埃氏筛法 O(nlglgn)最大公约数(gcd)最小公倍数(lcm)扩展...

网友评论

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

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