高精度运算除法

#include
#include
#include
using namespace std;
const int L=11000;
int sub(int *a,int *b,int La,int Lb)
{
    if(La=0;i--)
            if(a[i]>b[i]) break;
            else if(a[i]=0;i--)
        if(a[i]) return i+1;//返回差的位数
    return 0;//返回差的位数
 
}
string div(string n1,string n2,int nn)//n1,n2是字符串表示的被除数,除数,nn是选择返回商还是余数
{
    string s,v;//s存商,v存余数
     int a[L],b[L],r[L],La=n1.size(),Lb=n2.size(),i,tp=La;//a,b是整形数组表示被除数,除数,tp保存被除数的长度
     fill(a,a+L,0);fill(b,b+L,0);fill(r,r+L,0);//数组元素都置为0
     for(i=La-1;i>=0;i--) a[La-1-i]=n1[i]-'0';
     for(i=Lb-1;i>=0;i--) b[Lb-1-i]=n2[i]-'0';
     if(La=0;i--)//将除数扩大10^t倍
        if(i>=t) b[i]=b[i-t];
        else b[i]=0;
     Lb=La;
     for(int j=0;j<=t;j++)
     {
         int temp;
         while((temp=sub(a,b+j,La,Lb-j))>=0)//如果被除数比除数大继续减
         {
             La=temp;
             r[t-j]++;
         }
     }
     for(i=0;i=0) s+=r[i--]+'0';
     //cout<
     while(i>=0) v+=a[i--]+'0';
     if(v.empty()) v="0";
     //cout<>a>>b) cout<

 

你可能感兴趣的:(模板)