求助!为什么是50分
查看原帖
求助!为什么是50分
1289511
Ashina2554楼主2024/3/21 12:36
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;

int main(){
	string a,b;cin>>a>>b;
	int numa[100001]={0},numb[100001]={0},numc[100001]={0};
	for(int i=a.length()-1;i>=0;i--){
		numa[a.length()-1-i]=a[i]-'0';
	}//输入a 
	for(int i=b.length()-1;i>=0;i--){
		numb[b.length()-1-i]=b[i]-'0';
	}//输入b 
	if(a.length()>b.length()){
		for(int i=0;i<=b.length()-1;i++){
			if(numa[i]>=numb[i])
				numc[i]+=numa[i]-numb[i];
			else{
				numa[i]+=10;
				numa[i+1]--;
				numc[i]+=numa[i]-numb[i];
			}
		}
	}//a>b,正常进位减 
	else if(a.length()==b.length()){
		int flag = 0;
		for(int i=a.length()-1;i>=0;i--){
			if(numa[i]<numb[i]){
				flag = 1;
			}
		}//判断a是否小于b 
		if(flag==0){
			for(int i=0;i<=b.length()-1;i++){
				if(numa[i]>=numb[i])
					numc[i]+=numa[i]-numb[i];
				else{
					numa[i]+=10;
					numa[i+1]--;
					numc[i]+=numa[i]-numb[i];
				}
			}
		}//a大于等于b 
		else if(flag==1){
			for(int i=0;i<=b.length()-1;i++){
				if(numb[i]>=numa[i])
					numc[i]+=numb[i]-numa[i];
				else{
					numb[i]+=10;
					numb[i+1]--;
					numc[i]+=numb[i]-numa[i];
				}
			}
			cout<<'-';
		}//a小于b,输出负号,计算b-a 
	}
	else{
		for(int i=0;i<=b.length()-1;i++){
			if(numb[i]>=numa[i])
				numc[i]+=numb[i]-numa[i];
			else{
				numb[i]+=10;
				numb[i+1]--;
				numc[i]+=numb[i]-numa[i];
			}
		}
		cout<<'-';
	}//a小于b,输出负号,b-a 
	int len = max(a.length()-1,b.length()-1);
	for(int i=len;i>=0;i--){
		if(numc[i]==0&&i!=0)len--;
		if(numc[i]!=0)break;
		}//去除前导零 
	for(int i=len;i>=0;i--)//输出结果 
		cout<<numc[i];
	return 0;
} 
2024/3/21 12:36
加载中...