int myfunc(int a, int b)
{
int result = a;
for(int index = a - 1; index >= b; index--)
{
result -= index;
}
return result;
}
如何使这个函数根据我选择的a和b的值从最小的数减去最大的数?(例如,如果a = 5, b = 8,则程序将输入5-6-7-8 = -16)
你走错方向了。看看你想做什么:
5-6-7-8 = -16
^ ^ ^ ^
a | | |
a+1| |
a+2|
a+3
从a+1
开始,从往上算到b
int result = a;
for(int index = a + 1; index <= b; index++)
{
result -= index;
}
// result = -16 for a=5, b=8
演示对于初学者来说,变量index
是多余的。
为了避免溢出(至少在大多数情况下),变量result
的类型应该是long long int
而不是int
。例如,如果您将像
myfunc( INT_MIN , INT_MIN + 3 );
(前提是你已经包含了标题<limits.h>
),如果变量result
的类型是int
,那么函数将返回值-6
(实际上在这种情况下行为是未定义的),而如果变量result
的类型是long long int
,那么你将得到正确的结果4294967290
。
函数可以如下所示
long long int myfunc( int a, int b )
{
if ( b < a )
{
int tmp = b;
b = a;
a = tmp;
}
long long int result = a;
while ( a < b )
{
result -= ++a;
}
return result;
}
这是一个示范程序。
#include <stdio.h>
long long int myfunc( int a, int b )
{
if ( b < a )
{
int tmp = b;
b = a;
a = tmp;
}
long long int result = a;
while ( a < b )
{
result -= ++a;
}
return result;
}
int main(void)
{
printf( "%lldn", myfunc( 8, 5 ) );
return 0;
}
程序输出为
-16