1065. A+B and C (64bit) (20)

Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C.

Input Specification:

The first line of the input gives the positive number of test cases, T (<=10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.

Output Specification:

For each test case, output in one line "Case #X: true" if A+B>C, or "Case #X: false" otherwise, where X is the case number (starting from 1).

Sample Input:
3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0
Sample Output:
Case #1: false
Case #2: true
Case #3: false
 
#include <iostream>
#include <string>
using namespace std;
string plus1(const string& a,const string& b)//两个正数相加
{
	string res;
	int idxa = a.size() - 1;
	int idxb = b.size() - 1;
	int carry(0);
	while(idxa >= 0 && idxb >= 0)
	{
		int tmp = a[idxa] - '0' + b[idxb] - '0' + carry;
		carry = tmp / 10;
		res = (char)(tmp % 10 + '0') + res;
		-- idxa;--idxb;
	}
	while(idxa >= 0)
	{
		int tmp = a[idxa] - '0' + carry;
		carry = tmp / 10;
		res = (char)(tmp % 10 + '0') + res;
		-- idxa;
	}
	while(idxb >= 0)
	{
		int tmp = b[idxb] - '0' + carry;
		carry = tmp / 10;
		res = (char)(tmp % 10 + '0') + res;
		-- idxb;
	}
	if(carry > 0)
		res = (char)(carry + '0') + res;
	return res;
}
bool positivebigger(const string& a,const string& b)	//两个正数比较大小
{
	if (a.size() > b.size())
		return true;
	else if (a.size() == b.size())
		return a > b;
	else
		return false;
}
bool bigger(const string& a,const string& b)	//两个数比较大小
{
	if (a[0] == '-' && b[0] != '-')
		return false;
	else if (a[0] != '-' && b[0] == '-')
		return true;
	else if (a[0] == '-' && b[0] == '-')
		return positivebigger(b,a);
	else
		return positivebigger(a,b);
}
string specialminus1(const string& a,const string& b)	//大数减小数
{
	string res;
	int idxa = a.size() - 1;
	int idxb = b.size() - 1;
	int borrow(0);
	while(idxa >= 0 && idxb >= 0)
	{
		if (a[idxa] - borrow < b[idxb])
		{
			res = (char)(a[idxa] - borrow + 10 - b[idxb] + '0') + res;
			borrow = 1;
		}
		else
		{
			res = (char)(a[idxa] - borrow - b[idxb] + '0') + res;
			borrow = 0;
		}
		-- idxa;--idxb;
	}
	while(idxa >= 0)
	{
		if (a[idxa] - '0' < borrow)
		{
			res = (char)(a[idxa] - borrow + 10) + res;
			borrow = 1;
		}
		else
		{
			res = (char)(a[idxa] - borrow) + res;
			borrow = 0;
		}
		-- idxa;
	}
	int idx;
	for (idx = 0;idx < res.size();++ idx)
		if (res[idx] != '0')
			break;
	res = res.substr(idx);
	if (res.size() == 0)
		res = "0";
	return res;
}
string minus1(const string& a,const string& b)	//两个正数相减
{
	if (positivebigger(a,b))
		return specialminus1(a,b);
	else
	{
		string tmp = specialminus1(b,a);
		return '-' + tmp;
	}
}
string add(const string& a,const string& b)
{
	string res;
	if(a[0] == '-' && b[0] == '-')
	{
		res = plus1(a.substr(1),b);
		res = "-" + res;
	}
	else if(a[0] == '-' && b[0] != '-')
	{
		res = minus1(b,a.substr(1));
	}
	else if(a[0] != '-' && b[0] == '-')
	{
		res = minus1(a,b.substr(1));
	}
	else
	{
		res = plus1(a,b);
	}
	return res;
}

int main()
{
	int n;
	string a,b,c;
	cin >> n;
	for(int i = 0;i < n;++ i)
	{
		cin >> a >> b >> c;
		string res = add(a,b);
		if(bigger(res,c))
			cout << "Case #" << i + 1 << ": true" << endl;
		else
			cout << "Case #" << i + 1 << ": false" << endl;
	}
}


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页