请问高加怎样改成a,b及结果皆可为负数呢?
  • 板块学术版
  • 楼主xjqyorg
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/5/16 13:21
  • 上次更新2023/10/28 01:19:00
查看原帖
请问高加怎样改成a,b及结果皆可为负数呢?
713320
xjqyorg楼主2022/5/16 13:21

请问高加怎样改成a,b及结果皆可为负数呢? 已有代码如下

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
short a[200],b[200],ans[200],len;
char ca[200],cb[200];
bool dx(short a[],short b[]);
void add(short a[],short b[]);
void jian(short a[],short b[]);
int main()
{
	cin>>ca>>cb;
	short lena=strlen(ca);
	short lenb=strlen(cb);
	len=max(lena,lenb);
	if(ca[0]!='-'&&cb[0]!='-')
	{
		for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
		for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
		add(a,b);
		for(short i=len-1;i>=0;i--) cout<<ans[i];
		return 0;
	}
	if(ca[0]=='-'&&cb[0]=='-')
	{
		for(int i=0;i<len-1;i++) ca[i]=ca[i+1];	
		for(int i=0;i<len-1;i++) cb[i]=cb[i+1];	
		len--;
		for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
		for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
		add(a,b);
		cout<<"-";
		for(short i=len-1;i>=0;i--) cout<<ans[i];
		return 0;
	}
    if(ca[0]!='-'&&cb[0]=='-')
	{
		 
		for(int i=0;i<len-1;i++) cb[i]=cb[i+1];	
		lenb--;
		len=max(lena,lenb);
		for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
		for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
		if(!dx(a,b))
		{
			cout<<"-";
			jian(b,a);
   			for(short i=len-1;i>=0;i--) cout<<ans[i];                                                   
   			return 0;
		}
		jian(a,b);
		for(short i=len-1;i>=0;i--) cout<<ans[i];
		return 0;
	}
    if(ca[0]=='-'&&cb[0]!='-')
	{
		for(int i=0;i<len-1;i++) ca[i]=ca[i+1];	
		lena--;
		len=max(lena,lenb);
		for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
		for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
		if(dx(a,b)) 
		{
			cout<<"-";
			jian(a,b); 
    		for(short i=len-1;i>=0;i--) cout<<ans[i];
    		return 0; 
		}
		if(!dx(a,b))
		{
			jian(b,a);
		    for(short i=len-1;i>=0;i--) cout<<ans[i];
		    return 0;
		}
	}
}
void add(short a[],short b[])
{
    for(int i=0;i<len;++i)
    {
        ans[i]+=a[i]+b[i];
        if(ans[i]>=10)
        {
            ans[i+1]+=ans[i]/10;
            ans[i]%=10;
        }
    }
    if(ans[len]) len++; 
    else while((!ans[len-1])&&len>1) len--;
    return;
}
void jian(short a[],short b[])
{
    for(int i=0;i<len;++i)
    {
        ans[i]+=a[i]-b[i];
        if(ans[i]<0)
        {
            ans[i+1]+=ans[i+1]-1;
            ans[i]+=10;
            ans[i]%=10;
        }
    }
    if(ans[len]) len++; 
    else while((!ans[len-1])&&len>1) len--;
    return;
}
bool dx(short a[],short b[])
{
	short lena=strlen(ca);
	short lenb=strlen(cb);
	if(ca[0]=='-'&&cb[0]!='-') return 0;
	else if(ca[0]!='-'&&cb[0]=='-') return 1;
	else if(ca[0]!='-'&&cb[0]!='-'&&lena>lenb) return 1;//有负号都去掉后a大回1;b大回0; 
	else if(ca[0]!='-'&&cb[0]!='-'&&lena==lenb)
	{
		for(int i=0;i<len;i++)
		{
			if(a[i]>b[i]) return 1;
			else return 0;
		}
	} 
	else return 0;
}
感谢帮助(鞠躬)
2022/5/16 13:21
加载中...