题目如上
此题在做过后,发现难点在于数据类型的边际问题。
int的数据范围在-2147483648 ~ 2147483647
而若A、B的取值处于边界时就会出现问题,产生溢出。
尤其当A、B的取值为负边界时,会自动取反,变为正值。
而且做加法时易出现溢出。
当然,直接将数据类型改为long类型可以避免问题,但笔者认为并没有获得本题最为珍贵的知识。
故,愚者之见,求加不如求减,既然会有临界值,则整体改变值,达到相对的大小关系不变,而各值依旧存在数据类型范围中。
一下为代码:
#include<iostream>
using namespace std;
int main()
{
int n, A, B, C;
int i = 0;
cin >> n;
bool *p = new bool[n];
while (i<n)
{
cin >> A >> B >> C;
if (A < 0)
{
if (A + 1 > C - B+1)
p[i] = true;
else
p[i] = false;
}
else
{
if (A - 1 > C - B-1)
p[i] = true;
else
p[i] = false;
}
i++;
}
for (int ii = 0;ii<i;ii++)
{
cout << "Case #" << ii + 1 << ": ";
if (p[ii] == 0)
cout << "false" << endl;
else
cout << "true" << endl;
}
delete[]p;
return 0;
}
同样,笔者在讨论区域有看见更多的思路,有想法的朋友可以去看看。
笔者当时看见有朋友,采用除法,减少大小,令笔者眼前一亮,然而不知其中缘由,在int类型的边际值出现时,采用除法时会使值出现问题。
如图所示
总结:
在数据临界值时,int负值临界会取反再载入值。
保留相对关系,采用加减或乘除等值变化,将数值纳入目标范围。