C++高精度乘法

C++ 大数乘法

前言

高精度的思路很简单,一般你学会一种高精度,其他的自己也能慢慢的推导出来!
推荐练习题目: P1303 A*B Problem

思路

高精度,顾名思义,就是精度很高的运算(好像说跟没说没区别)
思路也很简单
就是输入的时候用数组存储,因为用int数组输入时不好输入,所以用string,char
我们可以先逆序将数组输入、存储
然后再计算
最后处理进位、前导0、以及逆序输出就可以了

举例:

12345 string A
67890 string B
先转化成int(中间可以逆序)
A 5 4 3 2 1 A
B 0 9 8 7 6 B
然后×一下
最后输出就OK了

代码

为了方便蒟蒻们抄,所以就没写注释

#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
char str1[1010], str2[1010];
int num1[N], num2[N], num3[N];
void change(char *s, int num[])
{
	int len = strlen(s);
	for (int i = 0;i < len;i++)
	{
		num[len - 1 - i] = s[i] - '0';
	}
}
void print(int num[])
{
	int len = N;
	while (num[len] == 0 && len >= 1)
	{
		len--;
	}
	for (int i = len; i >= 0; i--)
	{
		cout << num[i];
	}
}
int main()
{
	cin >> str1 >> str2;
	change(str1, num1);
	change(str2, num2);
	for (int i = 0; str1[i]; i++)
	{
		for (int j = 0; str2[j]; j++)
		{
			num3[i + j] += num1[i] * num2[j];
		}
	}
	for (int i = 0; i < N - 1; i++)
	{
		num3[i+1] += num3[i] / 10;
		num3[i] %= 10;
	}
	print(num3);
	return 0;
}

结尾

高精度的思路很简单,一般来讲都是换一个计算方法
例如减法:就是改个结尾和计算就可以了

友情链接

PCK团队

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值