3-29 OJ 劫后余生

题目描述

LZY历经千辛万苦终于逃出了密室。他觉得这个密室很好玩,就想让他的徒弟WYB也体验一下。
听说WYB的A+B学的滚瓜烂熟,特意出了一道加减法给她测测自己的底子,为进密室做做准备。

输入

题目有多组输入样例,输入三个非负整数 A,B,C (位数均不超过10000位 )

约束:

对于每个测试数据文件,测试样例不超过60组。

输出

输出A - B + C 的答案。

样例输入 Copy

1 2 3

样例输出 Copy

2

思路:

大数a+b-c.

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
OJ