高精度乘法

高精度乘法,第1张

高精度乘法

       给定两个非负整数(不含前导 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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存