高精度乘除法
注意:和加减法一样都要倒着存进去,除法可以不用,但为了统一索性都用倒着存储
>>乘法实例
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
vector<int> mul(vector<int> A,int b)
{
vector<int> C;
int t=0;
for(int i = 0;i<A.size();i++)
{
t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
while(t) C.push_back(t%10), t/=10;
while(C.size()>1 && C.back()==0) C.pop_back(); //清除前面多余的0
return C;
}
int main()
{
string a;
int b;
cin>>a>>b;
vector<int> A,B,C;
for(int i = a.size()-1;i>=0; i--) A.push_back(a[i]-'0');
C=mul(A,b);
for(int i = C.size()-1;i>=0;i--) cout<<C[i];
puts("");
return 0;
}
优化(把t!=0的条件合并到前面)
vector<int> mul(vector<int> A,int b)
{
vector<int> C;
int t=0;
for(int i = 0 ; i<A.size() || t ; i++)
{
if(A.size()) t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
>>除法实例
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
vector <int> div(vector <int> A,int b,int &r) //传入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=r%b;
}
reverse(C.begin(),C.end()); //要再反转C
while(C.size()>1 && C.back()==0) C.pop_back(); //清除多余的0
return C;
}
int main()
{
string a;
int b;
cin>>a>>b;
vector<int> A,C;
for(int i = a.size()-1;i>=0;i--)
{
A.push_back(a[i]-'0');
}
int r;
C=div(A,b,r);
for(int i=C.size()-1;i>=0;i--) cout<<C[i];
cout<<endl<<r<<endl;
return 0;
}