大神们求助啊就差一个点了
查看原帖
大神们求助啊就差一个点了
447562
像素旋转楼主2021/1/13 18:51
#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

2021/1/13 18:51
加载中...