单选题

小杨编写了一个如下的高精度除法函数,则横线上应填写的代码为(    )。

const int MAXN =1005://最大位数
struct BigInt {
    int d[MAXN];// 存储数字,d[0]是个位,d[1]是十位,...
    int len;// 数字长度

    BigInt(){
        memset(d,0,sizeof(d));
        len = 0;
    }
};
//比较两个高精度数的大小
int compare(BigInt a,BigInt b){
    if(a.len !=b.len)return a.len >b.len ?1 :-1;
    for(int i=a.len-1;i>=0;i--){
        if(a.d[i]!= b.d[i])return a.d[i]>b.d[i]?1 :-1;
    }
    return 0;
}
// 高精度减法
BigInt sub(BigInt a, BigInt b){
    BigInt c;
    for(int i=0;i<a.len; i++){
        c.d[i]+= a.d[i]- b.d[i];
        if(c.d[i]<0){
            c.d[i]+= 10;
            c.d[i+1]--;
        }
    }
    c.len = a.len;
    while(c.len>1&&c.d[c.len-1]==0)c.len--;
    return c;
}
// 高精度除法(a/b,返回商和余数)
pair<BigInt,BigInt>div(BigInt a,BigInt b){
    BigInt q,r;//q是商,r是余数

    if(compare(a,b)<0){// 如果a<b,商为0,余数为a
        q.len = 1;
        q.d[0]= 0;
        r=a;
        return make _pair(q,r);
    }

    //初始化余数r为a的前b.len位
    r.len = b.len;
    for(int i=a.len-1;i>=a.len-b.len; i--){
        r.d[i-(a.len-b.len)]= a.d[i];
    }
    // 逐位计算商
    for(int i=a.len-b.len;i>=0;i--){
        //把下一位加入余数
        if(r.len>1r.d[0]!=0){
            for(int j=r.len;j>@;j--){
                r.d[j]=r.d[j-1];
            }
            ______________
        }else {
            r.d[0]=a.d[i]
            r.len =1;
    }
    ]// 计算当前位的商
    while(compare(r,b)>=0){
        r=sub(r,b);
        q.d[i]++;
    }
}

    // 确定商的长度
    q.len=a.len-b.len + 1;
    while(q.len >1&&q.d[q.len-1]==0)q.len--;

    // 处理余数前导零
    while(r.len >1&&r.d[r.len-1]==0)r.len--;
    return make_pair(q,r);
}
A

r.d[0]= a.d[i];

r.len++;

B

r.d[i]= a.d[i];

r.len++;

C

r.d[i]= a.d[i];

r.len = 1;

D

r.d[0]= a.d[i];

r.len = 1

赣ICP备20007335号-2