hello, 说完加减,再说乘除
高精乘
#include<bits/stdc++.h>
using namespace std;
int b;
string a;
vector<int> av, cv;
vector<int> mul(vector<int> av, int b){
int t = 0;
vector<int> cv;
for (int i = 0; i < av.size(); i ++){
cv.push_back((av[i] * b + t) % 10);
t = (av[i] * b + t) / 10;
}
if (t != 0) cv.push_back(t);
return cv;
}
int main(){
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i --) av.push_back(a[i] - '0');
if (b == 0){
cout << 0;
return 0;
}
cv = mul(av, b);
for (int i = cv.size() - 1; i >= 0; i --) cout << cv[i];
system("pause");
return 0;
}
这个和人工手算有一点区别, 我们把b看成一个数,而不是分位乘(因为b很小)
高精除也一样
高精除
#include<bits/stdc++.h>
using namespace std;
string a;
long long b, r;
vector<long long> av, bv, cv;
vector<long long> div(vector<long long> av, long long b){
long long temp = 0;
vector<long long> cv;
for (long long i = 0; i < av.size(); i ++){
temp = temp * 10 + av[i];
cv.push_back(temp / b);
temp = temp % b;
}
r = temp;
for (long long i = 0; i < cv.size(); i ++){
if (cv[0] != 0) break;
cv.erase(cv.begin());
}
return cv;
}
int main(){
cin >> a >> b;
for (long long i = 0; i < a.size(); i ++) av.push_back(a[i] - '0');
cv = div(av, b);
if (cv.empty() == true) cout << 0;
for (long long i = 0; i < cv.size(); i ++) cout << cv[i];
cout << endl << r;
system("pause");
return 0;
}
这个我没有倒着存, 我认为更方便一些
end jieshu