int noofcases = int.Parse(Console.ReadLine());
for (int i = 0; i < noofcases; i++)
{
int number = int.Parse(Console.ReadLine());
long result = -1;
int a, b, c;
for( a = 1; a <= number/3; a++)
{
b = (((number * number) - (2 * a * number)) / ((2 * number) - (2 * a)));
c = number - a - b;
if((a*a) + (b*b) == (c*c))
{
result = (a * b * c);
}
}
Console.WriteLine(result);
}
答案 0 :(得分:1)
C#中的int
是一个32位带符号整数,范围在-2,147,483,648和2,147,483,647之间。
这意味着int
中可以存储的最大值为2,147,483,647。您的期望值4,445,280,000,是该最大值的两倍以上。
当您的int
值超过2147,483,647的最大值时,它将滚动到-2,147,483,648,然后倒数为0。
因此,随着您的体验,4,445,280,000将变为150,312,704。
仅将long
用于结果 将不起作用,因为任何int
乘以int
的输出将始终是{{1 }},除非您使用显式强制转换。
只需将您的int
切换到程序中的int
,它就会按预期运行:
long
输出:
int noofcases = int.Parse(Console.ReadLine());
for (int i = 0; i < noofcases; i++)
{
long number = int.Parse(Console.ReadLine());
long result = -1;
long a, b, c;
for (a = 1; a <= number / 3; a++)
{
b = (((number * number) - (2 * a * number)) / ((2 * number) - (2 * a)));
c = number - a - b;
if ((a * a) + (b * b) == (c * c))
{
result = (a * b * c);
}
}
Console.WriteLine(result);
}