【高精度】高精度乘法(详细代码)

【高精度】高精度乘法(详细代码)

1.【题目描述】

【题目描述】
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。

【输入】
输入两个高精度正整数M和N。

【输出】
求这两个高精度数的积。

【输入样例】
36
3
【输出样例】
108

2.【代码】

#include <bits/stdc++.h>
using namespace std;
int a[10000],b[10000],c[100000],d=1,x,y,lenc=0;
char a1[201],b1[201];
int main()
{
	cin>>a1;
	cin>>b1;
	x=strlen(a1);
	y=strlen(b1);
	for(int i=1;i<=x;i++)
		a[i]=a1[x-i]-'0';
	for(int k=1;k<=y;k++)
		b[k]=b1[y-k]-'0';
	for(int j=1;j<=x;j++)
	{
		int z=0;
		for(int i=1;i<=y;i++)
		{
			c[i+j-1]=b[i]*a[j]+z+c[i+j-1];
			z=c[i+j-1]/10;
			c[i+j-1]=c[i+j-1]%10;
		}
		c[j+y]=z;
	}
	lenc=x+y;
	while(c[lenc]==0&&lenc>1)
		lenc--;
	for(int d=lenc;d>=1;d--)
		cout<<c[d];
	return 0;
}

仅供参考!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中实现精度乘法可以使用字符串或数组来存储大整数,并通过模拟手工乘法的方式进行计算。以下是一个示例代码,展示了如何实现精度乘法: ```cpp #include <iostream> #include <vector> #include <algorithm> std::string multiply(std::string num1, std::string num2) { int len1 = num1.length(); int len2 = num2.length(); std::vector<int> result(len1 + len2, 0); for (int i = len1 - 1; i >= 0; i--) { for (int j = len2 - 1; j >= 0; j--) { int product = (num1[i] - '0') * (num2[j] - '0'); int pos1 = i + j; int pos2 = i + j + 1; int sum = product + result[pos2]; result[pos1] += sum / 10; result[pos2] = sum % 10; } } std::string res = ""; for (int digit : result) { if (!(res.empty() && digit == 0)) { res += std::to_string(digit); } } return res.empty() ? "0" : res; } int main() { std::string num1 = "123456789"; std::string num2 = "987654321"; std::string product = multiply(num1, num2); std::cout << "Product: " << product << std::endl; return 0; } ``` 在上述代码中,我们定义了一个 `multiply` 函数,它接受两个以字符串形式表示的大整数 `num1` 和 `num2`,并返回它们的乘积。我们使用一个 `result` 数组来存储中间结果,并通过两层循环模拟手工乘法的过程,逐位相乘并累加到正确的位置上。 注意,我们将每一位数字都作为整数存储在 `result` 数组中,并在最后将其转换为字符串表示的结果。 以上是一个简单的精度乘法示例,您可以根据实际需求进行修改和扩展。希望能对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值