AcWing 792. 高精度减法
原题链接
简单
作者:
人生导师yxc
,
2022-12-01 18:41:27
,
所有人可见
,
阅读 130
c语言实现
#include<stdio.h>
#include<string.h>
//判断a,b谁大
int check(char a[],char b[])
{
if(strlen(a) != strlen(b))//两个数不同位数
{
if(strlen(a) > strlen(b)) return 1;
else return 0;
}
for(int i = 0;i < strlen(a);i ++)
{
if(a[i] != b[i])
{
if(a[i] > b[i])
return 1;
else return 0;
}
}
return 1;
}
void print(int a[],int b[],int lena,int lenb)
{
int sum[100010];
int t = 0;
for(int i = 0;i < lena;i ++)
{
t = a[i] - b[i] - t;//用t的数值来表示是不是要向前借位
sum[i] = ( t + 10 ) % 10;//y总想的太棒了,666
//如果t是负数那么就要向前借位
if(t < 0) t = 1;
else t = 0;
}
//去前导0
while(sum[lena-1] == 0 && lena-1 > 0)
{
lena --;
}
//输出
for(int i = lena-1;i >= 0;i --)
{
printf("%d",sum[i]);
}
}
int main()
{
char a[100010];
char b[100010];
scanf("%s",a);
scanf("%s",b);
//计算长度
int lena=strlen(a);
int lenb=strlen(b);
//初始化
int A[100010]={0};
int B[100010]={0};
//字符变数字
for(int i = 0,j = lena-1;i < lena;i ++,j --)
{
A[i] = a[j]-'0';
}
for(int i = 0,j = lenb-1;i < lenb;i ++,j --)
{
B[i] = b[j]-'0';
}
//先判断a,b大小,决定要不要交换位置
if( check( a, b) == 1)//a>=b
{
print(A,B,lena,lenb);
}
else//a<b,要输出负号
{
printf("-");
print(B,A,lenb,lena);
}
return 0;
}