1.19 试编写算法,计算i! * 2^i(i = 0, 1, ..., n - 1)的值并分别存入数组a[arrsize]的各个分量中。假设计算机中允许的整数最大值为MAXINT,则当n > arrsize或对某个k(0 <= k <= n - 1)使k! * 2^k > MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。
我的代码如下,大家看一下有没有问题:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned int uint;
#define MAXINT 0xFFFFFFFFU
#define ARRSIZE 20
// 求阶乘
// num: 要计算的阶乘数字
// status: 状态-1表示溢出、1表示计算争取
uint jie_chen(uint num, int &status)
{
uint result = 1;
if(num < 0)
{
exit(1);
}
int i = num;
while(i > 0)
{
// 检验是否溢出
// 如果MAXINT除result小于i,则result * i将会大于MAXINT,将会出现溢出
if((float)MAXINT / (float)result < i)
{
// 出现溢出则返回-1