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)
uj5u.com熱心網友回復:
你在“錯誤的方向”。看看你想做什么:
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
演示
uj5u.com熱心網友回復:
對于初學者來說,變數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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322616.html
上一篇:將主要游戲回圈轉化為功能
