【说明】 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:m=a[k]×10k-2+a[k一1]×10k-3+…+a[3]×10+a[2]其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、

admin2014-10-11  32

问题 【说明】
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:m=a[k]×10k-2+a[k一1]×10k-3+…+a[3]×10+a[2]其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。
  intcmp(int*LA,  int*LB);
    /*比较长整数LA与LB的绝对值大小*/
    /*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/
    intADD(int*LA,  int*LB,  int*LC)
    /*计算长整数LA与LB的和,结果存储于LC中*/
    /*注意:正数与负数的和相当于正数与负数绝对值的差*/
    /*数据有误返回0,正常返回1*/
    {
    if(LA==NULL||LB==NULL  l I  LC==NULL)return0;
    int*pA,  *pB,  i,  N,  carry,  flag;
    flag=LA[0]  +LB[0];
    switch(flag){/*根据参与运算的两个数的符号进行不同的操作*/
    case 0:
    case 2:
    LC[0]=LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/
    pA=LA;
    pB=LB;
    (1) ;
    break;
    case 1:  /*LA与LB异号*/
    /*比较两者的绝对值大小,结果符号与较大者相同*/
    flag=(2) ;
    if(flag>0)(/*LA较大*/
    LC[0]=LA[0];
    pA=LA;
    pB=LB;
    )
    else if(flag<0){/*LB较大*/
    LC[0]  =LB[0];
    pA=LB;
    pB=LA;
}
    else(/*LA与LB相等*/
    LC[0]=0;
    LC[1]=0;
    return 1;
    }
    flag=一1;
    break;
    default:
    return 0;
    break;
    )/*switch*/
    /*绝对值相加减*/
    /*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减情况*/
    (3);
    N=LA[1]>LB[1]?LA[1]  :LB[1];
    for(i=0;i    if(i>=pA[1])(/*LA计算完毕*/
    carry+=flag*pB[i+2];
    }
    else if(i>=pB[1])(/*LB计算完毕*/
    carry+=pA[i+2];
    }
    else{
    carry+=pA[i+2]+flag*pB[i+2];
    LC[i+2]=carry%1 0;
    carry/=10;
    if((4)){/*需要借位,针对减法*/
    LC[i+2]+=10;
    carry一一;
    }
    }/*for*/
    if(5(/*最高进位,针对加法*/
    LC[i+2]=carry;
    i++;
    }
    if(LC[i+1]==0)i一一;/*若最高位为零,针对减法*/
    LC[1]=i;
    return 1;
    };/*ADD*/

选项

答案(1)flag=1 (2)cmp(LA,LB) (3)carry=0 (4)LC[i+2]<0 (5)carry

解析 先来看空(2),依据注释此处是比较LA与LB绝对值的大小,参照cmp函数说明及声明,应填cmp(LA,LB)。空(3)以下进行绝对值相加减。carry+=pA[i+2]+flag*pB[i+2];可见,CarTy需要进行初始化,故空(3)应填carry=0。仔细分析该计算式,可知flag是符号,flag为1时,计算pA+pB,flag为一1时,计算pA—pB。由此也推断出空(1)应填flag=1。case1中亦有对应语句flag=一1可得验证。由注释可见空(4)要填的是需要借位的条件。当不够减时需要向高一位借位,也就是不借位时相减结果是负数。因此空(4)应填LC[i+2]<0。同(4),空(5)要填需要有最高进位的条件。Carry变量表示的就是进位。因此空(5)应填carry(或carry!=0)。注此处carry是不可能为负数。
转载请注明原文地址:https://kaotiyun.com/show/EaDZ777K
0

相关试题推荐
最新回复(0)