【问题标题】:Subtracting a sequence of numbers using for loop in C Programming在C编程中使用for循环减去一个数字序列
【发布时间】:2021-12-03 21:53:45
【问题描述】:
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)
【问题讨论】:
标签:
c
loops
for-loop
subtraction
function-definition
【解决方案1】:
你走的是“错误的方向”。看看你想做什么:
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
Demo
【解决方案2】:
对于初学者来说,变量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( "%lld\n", myfunc( 8, 5 ) );
return 0;
}
程序输出是
-16