对于初学者来说,函数应该声明为
long long int mult_while( const int *array, size_t len );
即返回类型应为long long int 以避免溢出。并且应该使用限定符 const 声明指针,因为数组没有在函数内更改。数组的大小应该是size_t,
除了参数之外,您不需要再声明一个局部变量,就像在第一个函数实现中的 for 循环中所做的那样。
该功能可以使用while循环通过以下方式实现。
long long int mult_while( const int *array, size_t len )
{
long long int mult = len == 0 ? 0 : 1;
while ( len-- ) mult *= array[len];
return mult;
}
注意,一般情况下用户可以传递数组的长度等于0,这种情况下返回0逻辑上是一致的。
这是一个演示程序。
#include <stdio.h>
#include <limits.h>
long long int mult_while( const int *array, size_t len )
{
long long int mult = len == 0 ? 0 : 1;
while ( len-- ) mult *= array[len];
return mult;
}
int main(void)
{
int a[] = { INT_MAX, INT_MAX };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
printf( "The product of the array elements is equal to %lld\n", mult_while( a, N ) );
return 0;
}
程序输出是
2147483647 2147483647
The product of the array elements is equal to 4611686014132420609
如您所见,对于存储在数组中的如此大的数字,结果是正确的。
这是这里给出的答案中唯一或多或少正确的函数实现。