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;
}
结尾
高精度的思路很简单,一般来讲都是换一个计算方法
例如减法:就是改个结尾和计算就可以了