需要帮助
  • 板块学术版
  • 楼主__Function__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/23 20:34
  • 上次更新2024/8/23 23:04:06
查看原帖
需要帮助
1324175
__Function__楼主2024/8/23 20:34

本蒟蒻想写一段能处理任何形式的高减,但写了一半在调时发现错了,跳不出来。

#include<bits/stdc++.h>
using namespace std;
int da[10000],db[10000],dc[10000];
int main(){
	string a,b;
	cin>>a>>b;
	int lena=a.size(),lenb=b.size(),lenc=max(lena,lenb);
	if(a[0]=='-'&&b[0]=='-'&&a<b){
		for(int i=1;i<lena;i++) da[i]=a[lena-i-1]-'0';
		for(int i=1;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
		for(int i=1;i<lenc;i++){
			dc[i]+=db[i]-da[i];
			if(dc[i]<0)
			{
				dc[i+1]-=1;
				dc[i]+=10;
			}
			if (dc[lenc]) ++lenc;
			while(lenc>0&&dc[lenc-1]==0) lenc--;
			for(int i=lenc-1;i>=0;i--) cout<<dc[i];
		}
	}else if(a[0]!='-'&&b[0]!='-'){
		for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
		for(int i=0;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
		for(int i=0;i<lenc;i++){
			dc[i]+=da[i]-db[i];
			if(dc[i]<0)
			{
				dc[i+1]-=1;
				dc[i]+=10;
			}
		}
		if (dc[lenc]) ++lenc;
		while(lenc>0&&dc[lenc-1]==0) lenc--;
		for(int i=lenc-1;i>=0;i--) cout<<dc[i];
	}else if(a[0]=='-'&&b[0]=='-'&&a>b){
		for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
		for(int i=0;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
		for(int i=0;i<lenc;i++){
			dc[i]+=da[i]-db[i];
			if(dc[i]<0)
			{
				dc[i+1]-=1;
				dc[i]+=10;
			}
		}
		if (dc[lenc]) ++lenc;
		while(lenc>0&&dc[lenc-1]==0) lenc--;
		cout<<"-";
		for(int i=lenc-1;i>=0;i--) cout<<dc[i];
	}else if(a[0]!='-'&&b[0]=='-'){
		for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
		for(int i=1;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
		for(int i=0;i<lenc;i++){
			dc[i]+=da[i]+db[i];
			if(dc[i]>9)
			{
				dc[i+1]+=1;
				dc[i]-=10;
			}
		}
		if (dc[lenc]) ++lenc;
		while(lenc>0&&dc[lenc-1]==0) lenc--;
		for(int i=lenc-1;i>=0;i--) cout<<dc[i];
	}
} 
2024/8/23 20:34
加载中...