问题描述:
在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,
参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊
的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:
9876543210 + 1234567890 = ?
让字符串 num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。
-9876543210 + (-1234567890) = ?
让字符串 num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。
要求编程实现上述高精度的十进制加法。
代码:
int main()
{
while(1){
int addtional=0;
char num1[100],num2[100];
int out[101];
scanf("%s %s",num1,num2);
int i,j;
int start1=0,start2=0;
int k=0;
i=strlen(num1)-1;
j=strlen(num2)-1;
int maxlen;
maxlen=i>j?i:j;
while(i>=start1&&j>=start2){
if(((num1[i]-'0')+(num2[j]-'0')+addtional)>9){
out[k++]=((num1[i]-'0')+(num2[j]-'0')+addtional)%10;
addtional=1;
}else{
out[k++]=(num1[i]-'0')+(num2[j]-'0')+addtional;
addtional=0;
}
--i;
--j;
}
if(i>=start1){
if(addtional)out[k++]=(num1[i--]-'0')+addtional;
while(i>=start1){out[k++]=(num1[i--]-'0');}
}
else if(j>=start2){
if(addtional)out[k++]=(num2[j--]-'0')+addtional;
while(j>=start2){
out[k++]=(num2[j--]-'0');
}
}else{
if(addtional)out[k++]=1;
maxlen++;
}
for(int i=maxlen;i>=0;i--){
printf("%d",out[i]);
}
printf("/n");
fflush(stdin);
}
return 0;
}