题目
给定区间 [ ? 2 3 1 , 2 3 1 -2^{31}, 2^{31} ? 2 ? 3 1 ? ? , 2 ? 3 1 ? ? ] 内的 3 个整数 A A A 、 B B B 和 C C C ,请判断 A + B A+B A + B 是否大于 C C C 。
输入格式:
输入第 1 行给出正整数 T T T ( ≤ 1 0 \le 10 ≤ 1 0 ),是测试用例的个数。随后给出 T T T 组测试用例,每组占一行,顺序给出 A A A 、 B B B 和 C C C 。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true
如果 A + B > C A+B>C A + B > C ,否则输出 Case #X: false
,其中 X
是测试用例的编号(从 1 开始)。
输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
代码
#include<iostream>
#include<string>
using namespace std;
string judge(string a, string b, string c, int n);
int main()
{
string a, b, c, output = "";
int i, n;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> a >> b >> c;
output += judge(a, b, c, i) + "\n";
}
cout << output;
return 0;
}
string judge(string a, string b, string c, int n)
{
string add = "", right = "Case #" + to_string(n + 1) + ": true", notright = "Case #" + to_string(n + 1) + ": false",tool;
bool flag = true;
if (a[0] == '-' && b[0] == '-' && c[0] == '-')
{
a = a.substr(1, a.length() - 1);
b = b.substr(1, b.length() - 1);
c = c.substr(1, c.length() - 1);
flag = false;
}
else if (a[0] == '-' && b[0] == '-' && c[0] != '-')
return notright;
else if (a[0] != '-' && b[0] == '-' && c[0] == '-')
{
b = b.substr(1, b.length() - 1);
tool = b;
b = c.substr(1, c.length() - 1);
c = b;
}
else if (a[0] != '-' && b[0] == '-' && c[0] != '-')
{
b = b.substr(1, b.length() - 1);
tool = c;
c = a;
a = tool;
flag = false;
}
else if (a[0] != '-' && b[0] != '-' && c[0] == '-')
return right;
else if (a[0] == '-' && b[0] != '-' && c[0] == '-')
{
a = a.substr(1, b.length() - 1);
tool = c.substr(1, c.length() - 1);
c = a;
a = tool;
}
else if (a[0] == '-' && b[0] != '-' && c[0] != '-')
{
a = a.substr(1, b.length() - 1);
tool = c;
c = b;
b = tool;
flag = false;
}
a = "x" + a;
b = "x" + b;
int i, j, p, q, addi, jin = 0;
for (i = a.length() - 1, j = b.length() - 1; a[i] != 'x' || b[j] != 'x';)
{
switch (a[i]) {
case '0':p = 0; break;
case '1':p = 1; break;
case '2':p = 2; break;
case '3':p = 3; break;
case '4':p = 4; break;
case '5':p = 5; break;
case '6':p = 6; break;
case '7':p = 7; break;
case '8':p = 8; break;
case '9':p = 9; break;
default:p = 0;
}
switch (b[j]) {
case '0':q = 0; break;
case '1':q = 1; break;
case '2':q = 2; break;
case '3':q = 3; break;
case '4':q = 4; break;
case '5':q = 5; break;
case '6':q = 6; break;
case '7':q = 7; break;
case '8':q = 8; break;
case '9':q = 9; break;
default:q = 0;
}
addi = p + q + jin;
add = to_string(addi % 10) + add;
jin = addi / 10;
if (a[i] != 'x')
i--;
if (b[j] != 'x')
j--;
}
if (add.length() > c.length())
{
if (flag)
return right;
else
return notright;
}
else if (add.length() < c.length())
{
if (flag)
return notright;
else
return right;
}
else
{
for (i = 0; add[i] != '\0'; i++)
{
if (add[i] > c[i])
{
if (flag)
return right;
else
return notright;
}
else if(add[i] < c[i])
{
if (flag)
return notright;
else
return right;
}
}
if (flag)
return notright;
else
return right;
}
}