社区讨论

90分求救

P2142高精度减法参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m03m4j7j
此快照首次捕获于
2024/08/21 16:49
2 年前
此快照最后确认于
2025/11/04 22:50
4 个月前
查看原帖
这份代码90分,我怀疑是处理不了1 1这类结果为0的数据,希望各位大佬能指点几句我太弱了
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn=30000;
char a1[maxn],b1[maxn];
int a[maxn],b[maxn],s[maxn];
void jiao_huan(char a[],char b[])
{
	char c[maxn];
	for(int i=0;i<maxn;i++) c[i]=a[i];
	for(int i=0;i<maxn;i++) a[i]=b[i];
	for(int i=0;i<maxn;i++) b[i]=c[i];
	printf("-");
}
void bi(char a[],char b[])
{
	if(strlen(a)>strlen(b));
	else if(strlen(a)<strlen(b)) jiao_huan(a,b);
	else{
		for(int i=0;i<strlen(a);i++)
		{
			if((a[i] -'0')>(b[i] -'0'));
			else if((a[i] -'0')<(b[i] -'0'))jiao_huan(a,b);
		}
	}
}
int main()
{
	scanf("%s%s",a1,b1);
	memset(s,0,sizeof(s));
	bi(a1,b1);
	int sa=strlen(a1),sb=strlen(b1);
	int max=sa>sb?sa:sb;
	for(int i=0;i<sa;i++) a[sa - i - 1]=a1[i] - '0';
	for(int i=0;i<sb;i++) b[sb-i-1]=b1[i] - '0';
	for(int i=0;i<max;i++)
	{
		if(a[i]==-1)
		{
			a[i+1]--;
			a[i]+=10;
		}
		if(a[i]<b[i])
		{
			a[i+1]--;
			a[i]+=10;
		}
		s[i]=a[i]-b[i];
	}
	if(s[max-1]==0 && max-1>0) max--;
		for(int i=max-1;i>=0;i--)
	{
		printf("%d",s[i]);
	}
	printf("\n");
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...