您的位置:首页 > 其它

大整数减法

2012-04-23 20:35 148 查看
写了一个大整数减法的代码,有注释,可以参考一下。有不对的地方请高手指点。适用范围是被减数大于减数的情况下。

代码如下:

//s1 > s2时适用 s1被减数,s2减数, t结果
void mysub(char s1[], char s2[], char t[])
{
int i, l1, l2;
l1 = strlen(s1); l2 = strlen(s2);
t[l1] = '\0';l1--;//t最长为s1的长度,把最后一位赋值为结束标记
for(i = l2-1; i >= 0; i--, l1--)//s1与s2逐位相减
{
if(s1[l1] >= s2[i])//s1当前位大于s2的当前位
t[l1] = s1[l1] - s2[i] + '0';//直接减
else
{
//借位减
t[l1] = 10 + s1[l1] - s2[i] + '0';
s1[l1 -1] = s1[l1-1]-1;
}
}
int k = l1;
while(s1[k]<0)//如果s1剩下位置上的数小于0了,说明被借位了,要加上10
{
s1[k] += 10;//加上10
s1[k - 1] -= 1;//到前一位借位
k--;//指针前移
}
while(l1 >= 0)//把多余s2的长度那部分都加入到t结果数组里面
{
t[l1] = s1[l1];
l1--;
}
while (t[0]=='0') //把前导0去掉
{
l1=strlen(s1);
//每一位依次前移
for (i=0;i<l1-1;i++)
t[i]=t[i+1];
t[l1-1]='\0';
}
if(strlen(t) == 0)
{
t[0] = '0';
t[1] = '\0';
}
}

int main()
{
char b[1000], j[1000], r[1000];
cin >> b >> j;
mysub(b, j, r);
cout << r << endl;
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: