#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char* a, char* b)
{
char tmp = *a;
*a = *b;
*b = tmp;
}
void reverse(char* a, int low, int high)
{
while (low < high)
{
swap(&a[low], &a[high]);
low++;
high--;
}
}
char* addition(char* a, char* b)
{
int n = strlen(a);
int m = strlen(b);
int len = n>m ? n:m;
int i = 0;
int flag = 0;
int a1;
int b1;
char* c;
int sum;
reverse(a, 0, n-1);
reverse(b, 0, m-1);
/*多分配一个字节*/
c = (char*)malloc(len+2);
while (i < len)
{
a1 = i<n ? (a[i]-'0'):0;
b1 = i<m ? (b[i]-'0'):0;
sum = (a1+b1+flag)%10;
flag = (a1+b1+flag)/10;
c[i] = sum+'0';
i++;
}
if (flag == 1)
{
c[i++] = '1';
}
c[i] = '\0';
reverse(c, 0, i-1);
return c;
}
int rmBlankZero(char* c, int n)
{
int i = n-1;
/*保证至少有一个0*/
while (i>0 && c[i]=='0')
i--;
return i+1;
}
/*只处理A > B*/
char* subtraction(char* a, char* b)
{
int n = strlen(a);
int m = strlen(b);
int len = n>m ? n:m;
int i = 0;
int flag = 0;
int a1;
int b1;
char* c;
int sum;
reverse(a, 0, n-1);
reverse(b, 0, m-1);
c = (char*)malloc(len);
while (i < len)
{
a1 = i<n ? (a[i]-'0'):0;
b1 = i<m ? (b[i]-'0'):0;
a1 -= flag;
flag = a1<b1 ? 1:0;
sum = (a1-b1+flag*10)%10;
c[i] = sum+'0';
i++;
}
c[i] = '\0';
len = rmBlankZero(c, i);
c[len] = '\0';
reverse(c, 0, len-1);
return c;
}
int main()
{
char a[] = "99999999";
char b[] = "11111111";
char* c;
c = subtraction(a, b);
printf("%s\n", c);
return 0;
}