高精度之乘法

3117 高精度练习之乘法

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题目描述 Description

给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A*B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

#include<iostream>
#include<cstring>
using namespace std;
int a[501],b[501],f[501],lena,lenb,lenc=1,x;
char n[501],m[501];
int main()
{
    cin>>n;
    cin>>m;
    lena=strlen(n);
    lenb=strlen(m);
    for(int i=0; i<lena; i++)
        a[lena-i]=n[i]-‘0‘;
    for(int i=0; i<lenb; i++)
        b[lenb-i]=m[i]-‘0‘;
    for(int i=1; i<=lena; i++)
    {
        x=0;
        for(int j=1; j<=lenb; j++)
        {
            f[i+j-1]=a[i]*b[j]+x+f[i+j-1];
            x=f[i+j-1]/10;
            f[i+j-1]%=10;
        }
        f[i+lenb]=x;
    }
    lenc=lena+lenb;
    while(f[lenc]==0&&lenc>1)
        lenc--;
    for(int i=lenc; i>=1; i--)
        cout<<f[i];
    return 0;
}
时间: 2024-11-06 03:36:09

高精度之乘法的相关文章

hdu 1063 Exponentiation (高精度小数乘法)

//大数继续,额,要吐了. Problem Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. This problem re

uva 10106 Product(高精度大数乘法)

昨天刚写了个大数加法,今天又来了个大数乘法,其实解法差不多,只不过换成了好多个大数的相加而 已,看别人的算法其实跟我的也差不多,都是这个姿势.wa了一次,竟然忘了考虑0的情况,以后交题之前,都要判 断一下边缘数据,大数据和小数据,要不就是白白被扣时间啊 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; char a[

高精度加法乘法类

/** 如何用: 1.变量声明:可以给初值,如:BigInt ans=100; 可以补给初值(默认为0),如BigInt ans: 2.计算:可以连个BigInt对象相乘,相加:ans+ans*ans; 也可以和整数相乘相加,如:ans+78*ans; */ struct BigInt { const static int mod=10000; const static int DLEN=4; int a[600],len; BigInt() { memset(a,0,sizeof(a)); l

[转]高精度乘法计算

转载自: Daywei 高精度乘法计算 高精度乘法计算基础 1.高精度浮点运算方法 高精度浮点(Floating Point,FP)运算可以转换成整数型运算.由于高精度浮点数可以看成是由整数部分(Integer Part,IP)与小数部分(Decimal Part,DP)的组合,因此其乘法可以看成以下3种运算的组合,即整数x整数(IxI).整数x小数(IxD)和小数x小数(DxD).用表达式表示, 则FP1*FP2=IP1*IP2+(IP1*DP2+IP2*DP1)+DP1*DP2 (1)对于I

高精度运算专题3-乘法运算(The multiplication operation)

这个专题呢,我就来讲讲高精度的乘法,下面是三个计算乘法的函数,第一个函数是char类型的,要对字符串进行数字转换,而第二个是两个int类型的数组,不用转换成数字,第三个则更为优化,用a数组-b数组放回数组a里面 函数1思路:要先把char类型的转换成int类型的数,直接每个数-‘0’就可以实现把char类型的转换成int类型的了. ①记录数组a.数组b的长度,放到第一位 ②每个位相乘,用一个数来记录进位(初值为0),每个位相乘,加上进位,存入c数组的相对应的位置,每次进位要重新赋值 ③最后记得要

HDU 4927 Series 1(高精度+杨辉三角)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4927 解题报告:对于n,结果如下: C(0,n-1) *A[n] - C(1,n-1) * A[n-1] + C(2,n-1) * A[n-2] - C(3,n-1) * A[n-3] ....... C(n-1,n-1) * A[1]; n <= 3000,到了后面二项式会很大,因为要用到高精度的乘法和除法,所以直接用java的大数类写了,简单多了. 1 import java.math.BigI

c++ 高精度算法

包括: 两个高精度正整数加法 两个高精度正整数乘法 两个高精度正整数减法 两个高精度正整数除法 两个高精度正整数求余 两个高精度正整数数求最大公约数 两个高精度正整数数求最小公倍数 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 //清除前缀0,如果结果是空字符串则设为0 7 inline void clear(string& a){ 8 while(a.length()>0

高精度整数计算

        这部分主要是学习一下计算  无法用内置整数类型来保存它的值(即位数多到long long都表示不了)  的整数的加法和乘法         这里使用的方法是首先读入到一个char的数组里,然后初始化转换到int数组里,这样一位就对应数组的一项.  下面这道题是加法计算,思路就是将对应两个数组位置的数与前一位的进位相加 题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数

[题解+总结]20151010

1.前言 又是绿书上的题目.这种画风感觉还是好些的,虽然都是远古时代的.今天题目感觉难度适中,但是太过于偏向动态规划了吧...还有搜索傻逼题乱入. 2.Sort 产品排序 大概题意:给出n个产品,每个产品有加工时间和冷却时间.现有两台加工机,每台加工机同一时间只能加工一个产品.产品加工完后就进入冷却时间.要求在尽可能短的时间内完成所有产品的所有工序,求最短时间. 题解: 动态规划.设存在两个产品x和y,y的冷却时间大于x,且x排在y之前.如果x和y是相邻的,可以发现在这种情况下完成时间是max{