大数相减

1182: a-b

时间限制: 10 Sec   内存限制: 128 MB
提交: 490   解决: 196
[ 提交][ 状态][ 讨论版]

题目描述

求a-b的值

输入

第一行一个整数T,表示接下来有T行
每行两个整数是a,b,(0<=a,b<=10^10000)

输出

输出值

样例输入

2
100
98100000000000000000000 1

样例输出

2
99999999999999999999

提示

来源


心得:1、一开始按照大数相加的思路来的,后来发现不完全一样,相减之后的长度一定要小于减数里面最长的,

所以不用另外设数组,还用原来的最长的数组就好了。

2、要分情况考虑,第一、两个数组长度形同,可以是两个数组完全一样,结果为0,否则相减;

第二、减数较长,结果为正数,减数作为结果数组;

第三、被减数较长,结果为负,被减数作为结果数组。

3、如果数组位数为负值,要借位。


代码如下:

#include<bits/stdc++.h>

using namespace std;
char a[10001];
char b[10001];
char* jf(char a[],int l1,char b[],int l2)
{
int i,j;
for(i=l1-1,j=l2-1;i>=0;i--,j--)
{
if(j>=0) a[i]=a[i]-b[j]+'0';
else if(j<0) a[i]=a[i];
if(a[i]<'0') a[i]=a[i]+10,a[i-1]--;
}
return a;
}
int main(void)
{
int n,i,t,j;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%s %s",a,b);
int l1=strlen(a),l2=strlen(b),fg=0;
if(l1>l2) jf(a,l1,b,l2);
else if(l1<l2) jf(b,l2,a,l1),fg=1;
else if(l1==l2)
{
if(strcmp(a,b)==0) 
{
printf("0\n");
continue;
}
else if(strcmp(a,b)<0) jf(b,l2,a,l1),fg=1;
else if(strcmp(a,b)>0) jf(a,l1,b,l2);
}
if(fg)
{
printf("-");i=0;
while(b[i]=='0'){
i++;
}
for(;i<l2;i++) printf("%c",b[i]);
printf("\n"); 
}
else 
{
i=0;
while(a[i]=='0'){
i++;
}
for(;i<l1;i++) printf("%c",a[i]);
printf("\n");
}
}
return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值