高精度乘高精度
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
string a, b;
vector<int> mul(vector<int>& A, vector<int>& B)
{
vector<int>C(max(A.size(), B.size()) + 7, 0);//将C的数组开大一点,就不会导致后面数组爆了
for (int i = 0; i < A.size(); i++)
{
for (int j = 0; j < B.size(); j++)
{
C[i + j] += A[i] * B[j];
}
}
//后面就是进行进制处理
int t = 0;
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()
{
cin >> a >> b;
vector<int>A, B;
//分别用vector进行存,注意是存储的顺序,低位在前,方便后续进行计算
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');
}
auto c = mul(A, B);
//最后就是进行输出了
for (int i = c.size() - 1; i >= 0; i--)
{
cout << c[i];
}
return 0;
}
高精度乘低精度
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
string a;
vector<int> mul(vector<int>& A, int b)
{
vector<int>C(A.size() + 2, 0);
for (int i = 0; i < A.size(); i++)
{
C[i] = A[i] * b;
}
int t = 0;
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()
{
int b;
cin >> a >> b;
vector<int>A;
for (int i = a.size() - 1; i >= 0; i--)
{
A.push_back(a[i] - '0');
}
auto C=mul(A, b);
for (int i = C.size() - 1; i >= 0; i--)
{
cout << C[i];
}
return 0;
}
总结:,这篇是对上篇的补充,里面使用到vector数组,和ascall码的一些运用,后续还会更新关于这两个知识。
很久没有发博客了,今天心血来潮写了一篇,希望这篇对读者有所帮助,后续还会进行更新,感谢关注。如果有什么问题,可以评论,将为你解答。