C语言高精度算法-减法
#include "stdio.h"
#include "string.h"
#define N 100000
int gjd(int C[],int A[],int B[],int k1,int k2)
{
int t=0,i;//t代表进位
for(i=0;i<k1;i++)
{
t=A[i]-t;
if(i<k2)
t=t-B[i];
C[i]=(t+10)%10;
if(t<0)
t=1;
else
t=0;
}
for(int j=i-1;j>=0;j--)
if(j>0&&C[j]==0);
else
printf("%d",C[j]);
}
int cmp(int A[],int B[],int k1,int k2)
{
if(k1!=k2)
if(k1>k2)
return 1;
else
return 0;
for(int i=k1-1;i>=0;i--)
if(B[i]!=A[i])
return A[i]>B[i];
return 1;
}
int main()
{
char s1[N],s2[N];
char s3[N];
int A[N],B[N],C[N];
int k1=0,k2=0,k3=0;
gets(s1);
gets(s2);
int i,j;
for(i=0,j=strlen(s1)-1;i<j;i++,j--)
{
char t;
t=s1[i];s1[i]=s1[j];s1[j]=t;
}
for(i=0,j=strlen(s2)-1;i<j;i++,j--)
{
char t;
t=s2[i];s2[i]=s2[j];s2[j]=t;
}
for(i=0;i<strlen(s1);i++)
A[i]=s1[i]-48;
k1=i;
for(i=0;i<strlen(s2);i++)
B[i]=s2[i]-48;
k2=i;
if(cmp(A,B,k1,k2))
{
k3=gjd(C,A,B,k1,k2);
}
else
{
printf("-");
k3=gjd(C,B,A,k2,k1);
}
}```