#include<stdio.h>
#include<string.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
int minus(int *,int *,int *,int , int);
int flag2=0;//用来确定两数长度相同时数的大小
int main(void)
{
int a[10100] = { 0 }, b[10100] = { 0 }, d[10100] = {0};
char c[10100] = { 0 }, cc[10100] = {0};
int i,num1,num2,len;
scanf("%s", c);
num1 = strlen(c);
for (i = 0; i < num1; i++)
a[num1 - i - 1] = c[i]-'0';
scanf("%s", cc);
num2 = strlen(cc);
for (i = 0; i < num2; i++)
b[num2 - i - 1] = cc[i] - '0';
//此时已经存了两个便于我们进行加减模拟的反向数了
if (strcmp(c, cc) > 0)flag2 = 1;
len=minus(a, b, d, num1, num2);//调用函数做减法
for (i = 0; i < len; i++)
printf("%d", d[len - i - 1]);
getchar();
getchar();
return 0;
}
int minus(int *p,int *q,int *p2,int num1,int num2)
{
int flag = 0;
int *k=p,*l=q,*u=p2;
//永远只让大减小
if (num1>num2||num1==num2&&flag2)
for (; k < max(num1, num2) + p; k++, l++)
*u++ = *k - *l;
else {
flag = 1;
for (; l < max(num1, num2) + q; k++, l++)
*u++ = *l - *k;
}
//进行减后数组整理
for (u = p2; u < p2 + max(num1,num2); u++) {
if (*u < 0) {
*u = 10 + *u;
*(u + 1) -= 1;
}
}
int len;
len = max(num1, num2);
u = p2;
while (*(u + len - 1) == 0&&len>1) len--;//最后确定位数
if (flag == 1)
printf("-");
return len;
}
数据点6不知道为啥怎么都AC不了,错误输出好像是0