高精度乘法一般都是由一个大数乘以一个可以由int存放的整数类型。
#include <iostream> #include <vector> using namespace std; vector<int> mul(vector<int> &a,int b){ int t = 0; vector<int> c; for (int i=0;i<a.size()||t; i++){ //判断程序终止的条件有两个一个是i小于数组长度另一个是t需要大于0; if (i<a.size()) t += a[i] * b; c.push_back(t % 10); t = t/10; } return c; } int main(){ vector<int> a,c; string s; int b; cin>>s>>b; for (int i=s.size()-1; i>-1; i--){ a.push_back(s[i]-‘0‘); } c = mul(a, b); for (int i=c.size()-1; i>-1; i--){ cout << c[i]; } }
高精度除法相对复杂一点点
除法可以正着输入输出,但为了日后的题目与加减乘除一起使用,还是用了倒叙输入的办法。
#include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> div(vector<int> &A, int b, int &r) { // 余数利用引用传回 vector<int> C; // 商 r = 0; // 余数 for (int i = A.size() - 1; i >= 0; i--) { r = r * 10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(), C.end());//翻转函数 while (C.size() > 1 && C.back() == 0) C.pop_back();//去零 return C; } int main() { string a; int b; cin >> a >> b; vector<int> A; for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - ‘0‘); int r; auto C = div(A, b, r); for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]); cout << endl << r << endl; return 0; }