题目描述
高精度减法
输入输出格式
输入格式:
两个整数a,b(第二个可能比第一个大)
输出格式:
结果(是负数要输出负号)
输入输出样例
输入样例#1:
2
1输出样例#1:
1
源代码
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
char str1[25600],str2[25600],temp[25600];
int a[25600],b[25600],c[25600];
int main()
{
int lena,lenb,lenc;
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>str1;//输入被减数
cin>>str2;//输入减数
lena=strlen(str1);
lenb=strlen(str2);
if( (lena<lenb) || (lena==lenb&&strcmp(str1,str2)) )
{
strcpy(temp,str1);
strcpy(str1,str2);
strcpy(str2,temp);
cout<<"-";
}
lena=strlen(str1);
lenb=strlen(str2);
for(i=0;i<=lena-1;i++)//被数str1存入数组a
a[lena-i]=str1[i]-'0';
for(i=0;i<=lenb-1;i++)//减数str2存入数组b
b[lenb-i]=str2[i]-'0';
i=1;
while(i<=lena||i<=lenb)
{
if(a[i]<b[i])
{
a[i]+=10;//借位
a[i+1]--;//上一位减1
}
c[i]=a[i]-b[i];//对应位相减
i++;
}
lenc=i;
while((c[lenc]==0)&&(lenc>1))//删除前导0
lenc--;
for(i=lenc;i>=1;i--)//倒序输出
cout<<c[i];
cout<<endl;
return 0;
}