【分析解答题】
【说明】
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=A[k]×10k-2+A[k-1]×10k-3+…+A[3]×10+A[2]
其中A[1]保存该长整数的位数,A[0]保存该长整数的符号:0表示正数,1表示负数。
运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减的情况。注:不考虑溢出情况,即数组足够大。
【函数】
int Cmp(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 || lC==null)rEturn 0;
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;
{{u}} (1) {{/u}};
BrEAk;
CAsE 1:/*lA与lB异号*/
/*比较两者的绝对值大小,结果符号与较大者相同*/
FlAg={{u}} (2) {{/u}};
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指向较小数,不可能出现不够减的情况*/
{{u}} (3) {{/u}};
n=lA[1]>lB[1] lA[1]:lB[1];
For(i=0;i<n;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%10;
CArry /=10;
iF({{u}} (4) {{/u}}){/*需要借位,针对减法*/
lC[i+2]+=10;
CArry--;
}
}/*For*/
iF({{u}} (5) {{/u}}){/*最高进位,针对加法*/
lC[i+2]=CArry;
i++;
}
iF(lC[i+1]==0)i--;严若最高位为零,针对减法*/
lC[1]=i;
rEturn 1;
};/*ADD*/
查看答案解析
参考答案:
正在加载...
答案解析
正在加载...
根据网考网移动考试中心的统计,该试题:
0%的考友选择了A选项
0%的考友选择了B选项
0%的考友选择了C选项
0%的考友选择了D选项