除法的本质其实就是减法,按位找到可以除的就除
bool cmp(string a,string b)
{
int len1=a.length();
int len2=b.length();
if( len1==len2 )
{
for(int i=0;i<len1;i++)
{
if( a[i]<b[i] ) return false;
else if( a[i]>b[i] ) return true;
}
return true;
}
return len1>len2?true:false;
}
string divide(string a,string b)
{
string res;
string temp;
if( !cmp(a,b) ) return "0"; a<b的情况
int len1=a.length();
int len2=b.length();
int flag=0;
for(int i=0;i<len1;i++)
{
int num=0;
temp+=a[i]; //给temp加位数
while( cmp(temp,b) ) //如果此时temp>=b,说明可以减,即对应的商不为0
{
flag=1;
temp=sub(temp,b); //减法代码详见另一篇博客
num++; //可以减的话,减一次对应的商的位数加1
}
if( temp=="0" ) temp.clear(); //temp被减完了就clear掉
if( flag ) res+=num+'0';
}
return res;
}
高精度除int
按位除就好
string div(string a,int b)
{
string res;
int len = a.length();
vector<int> ans(len);
int temp = 0;
for( int i = 0 ; i < len ; i++ )
{
temp = temp * 10 + (a[i] - '0');
ans[i] = temp / b;
temp %= b;
}
for( int i = 0 ; i < len ; i++ )
{
char t = ans[i] + '0';
if( res.empty() && t == '0' ) continue;
res += t;
}
return res;
}