栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

高精度乘法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

高精度乘法

       给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式

       共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

       共一行,包含 A×B的值。

数据范围

       1≤A的长度≤100000
       0≤B≤10000

输入样例:

123456789
12345

输出样例:

1524074060205

高精度乘低精度

# include 
# include 
# include 
using namespace std;
const int N = 1e6 + 10;
vector  mul(vectorA,int b)
{
	vector C;
	int t = 0;
	for(int i=0;i> a >> b;
	vectorA,C;
	for(int i= a.size()-1;i>=0;i--)
	{
		A.push_back(a[i]-'0');     //逆序存储
	}
	if (b) C=mul(A, b);      //判断b是否为零
	else
		C.push_back(0);
	for(int i=C.size()-1;i>=0;i--)

	{
		printf("%d", C[i]);
	}
}

高精度乘高精度 

#include 
#include 
# include
using namespace std;

vector mul(vector& A, vector& B) 
{
    vector C(A.size() + B.size(), 0); // 初始化为 0,两数相乘得数的位数小于其位数之和
    int t = 0;
    for (int i = 0; i < A.size(); i++)
    {
        for (int j = 0; j < B.size(); j++)
        {
            C[i + j] += A[i] * B[j];
        }
    }
    for (int i = 0; i < C.size(); i++)
    {                    
        t += C[i];
        C[i] = t % 10;
        t /= 10;
    }
    while (C.size() > 1 && C.back() == 0)
    {
        C.pop_back();
    } // 去前导零
    return C;
}

int main() {
    string a, b;
    cin >> a >> b; 
    vector A, B;
    for (int i = a.size() - 1; i >= 0; i--)
    {
        A.push_back(a[i] - '0');
    }
    for (int i = b.size() - 1; i >= 0; i--)
    {
        B.push_back(b[i] - '0');
    }
    vector C = mul(A, B);
    for (int i = C.size() - 1; i >= 0; i--)
    {
        cout << C[i];
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号