3-29 OJ余波

タイトル説明

LZYは莫大な苦難がついに室から脱出した後。彼は、それがまた彼の弟子WYB経験を望んでいた、この室は楽しいであることを感じました。
私はA + BのWYBは、いくつかの準備を行うためにチャンバー内に、意図的CECEに減算彼女自身の基盤のうち、心で学ぶことを聞きました。

エントリー

入力サンプルのセットのタイトル複数三非負整数入力A、B、C(以下10000ビット)

制約:

各テスト・データ・ファイルの場合は、試験サンプルは、60の以上のグループではありません。

輸出

出力A - B + Cの答え。

サンプル入力のコピー

1 2 3

サンプル出力のコピー

2

アイデア:

大きな数字+のBC。

ACコード:

#include<bits/stdc++.h>
using namespace std;
string a,b,c;
vector<int> A,B,C,D,E;
bool big(vector<int>&A,vector<int>&B){
	if(A.size()!=B.size())	return A.size()>B.size();
	for(int i=A.size()-1;i>=0;i--){
		if(A[i]>B[i]){
			return true;
			break;
		}else if(A[i]<B[i]){
			return false;
			break;
		}
	}
	return true;
}
vector<int> add(vector<int>&A,vector<int>&B)//加法 
{
    vector<int> X;
    int t=0;
    for(int i=0;i<A.size()|| i<B.size();i++)
    {
        if(i<A.size()) t+=A[i];
        if(i<B.size()) t+=B[i];
        X.push_back(t % 10);
        t /= 10;
    }
    if(t!=0) X.push_back(1);
    return X;
}
vector<int> sub(vector<int>&A,vector<int>&B)//减法 
{
    vector<int> X;
    int t=0;
    for(int i=0;i<A.size();i++)
    {
        t=A[i]-t;
        if(i<B.size()) t-=B[i];
        X.push_back((t+10)%10);
        if(t<0) t=1;//如果t<0,退1加10. 
        else t=0;
    }
    while(X.size()>1 && X.back()==0) X.pop_back();
    return X;
}
int main()
{	
	while(cin>>a>>b>>c){
		A.clear();
		B.clear();
		C.clear();
		D.clear();
		E.clear();
		for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//将字符转成数字并存进数组中
	    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
	    for(int i=c.size()-1;i>=0;i--) C.push_back(c[i]-'0');
	    D=add (A,C);
	    if(big(D,B)){
	    	E=sub(D,B);
	    	for(int i=E.size()-1;i>=0;i--)	cout<<E[i];
	   		cout<<endl;
		}else{
			E=sub(B,D);
			cout<<"-";
			for(int i=E.size()-1;i>=0;i--)	cout<<E[i];
			cout<<endl;	
		}
	}
    return 0;
}
公開された34元の記事 ウォンの賞賛6 ビュー1335

おすすめ

転載: blog.csdn.net/qq_44669377/article/details/105214343