题目描述
高精度减法,求a-b。a,b都是不超过240位的非负整数。
输入
两个非负整数,每行一个。
输出
一个整数,代表两个整数相减之后的结果。
样例输入
33333333333333333333333333333333333333333
22222222222222222222222222222222222222222
样例输出
11111111111111111111111111111111111111111
AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
void reverse(char *array,int LEN)
{
for(int i=0;i<LEN/2;i++)
{
char temp=array[i];
array[i]=array[LEN-1-i];
array[LEN-1-i]=temp;
}
}
bool ar_cmp(char *a,char *b,int LEN_a,int LEN_b)
{
if(LEN_a>LEN_b)
{
return true;
}
else if(LEN_a==LEN_b)
{
int flag=0;
for(int i=LEN_a-1;i>=0;i--)
{
if(a[i]<b[i])
{
flag=1;
break;
}
}
if(flag==1)
{
return false;
}
else
return true;
}
else
return false;
}
int main()
{
char ar[9999],br[9999];
scanf("%s%s",ar,br);
int LEN_ar=(int)strlen(ar);
int LEN_br=(int)strlen(br);
int Max_LEN=LEN_ar;
if(Max_LEN<LEN_br)
Max_LEN=LEN_br;
Max_LEN+=10;
reverse(ar, LEN_ar);
reverse(br, LEN_br);
for(int i=LEN_ar;i<Max_LEN;i++)
ar[i]='0';
for(int i=LEN_br;i<Max_LEN;i++)
br[i]='0';
int result[Max_LEN];
bool whether_print_negitive=0;
if(ar_cmp(ar, br, LEN_ar, LEN_br))
{
for(int j=0;j<Max_LEN;j++)
{
result[j]=ar[j]-br[j];
}
}
else
{
whether_print_negitive=1;
for(int j=0;j<Max_LEN;j++)
{
result[j]=br[j]-ar[j];
}
}
for(int k=0;k<Max_LEN-1;k++)
{
if(result[k]<0)
{
result[k]+=10;
result[k+1]-=1;
}
}
if(whether_print_negitive)
printf("-");
int flag=0;
for(int l=Max_LEN-1;l>=0;l--)
{
if(result[l]!=0)
flag=1;
if(flag==1)
printf("%d",result[l]);
}
if(flag==0)
printf("0");
return 0;
}