计算i阶乘*2^i(i=0,1,...,n-1)的值并分别存入数组a[arrsize]的各个分量中。假设计算机中允许的整数最大值为MAXINT,则当n>arrsize或对某个k(0<=k<=n-1)

计算i!*2^i(i=0,1,...,n-1)的值并分别存入数组a[arrsize]的各个分量中。
假设计算机中允许的整数最大值为MAXINT,则当n>arrsize或对某个k(0<=k<=n-1)
使k!*2^k>MAXINT时,应该按出错处理。注意选择逆认为较好的出错处理方法。

/*
计算i!*2^i(i=0,1,...,n-1)的值并分别存入数组a[arrsize]的各个分量中。
假设计算机中允许的整数最大值为MAXINT,则当n>arrsize或对某个k(0<=k<=n-1)
使k!*2^k>MAXINT时,应该按出错处理。注意选择逆认为较好的出错处理方法。 
*/
#define MAXINT 1<<25//这里作为出错标识 
#define arrsize 1001
#include <stdio.h>
#include <cmath>

long long int a[arrsize] = {0};//保存运算结果 

void reckon_(long int n)
{
	if(n > arrsize)
	{
		printf("n超限");
		return;
	}
	
	for(long int i = 0;i < n;i ++)//i=0,1,...,n-1
	{
		if(i == 0)
		{
			a[i] = 1;
			continue;
		}
		
		long int rank = 1;//保存i的阶乘的值 
		long int j = i;
		while( j != 0)
		{
			rank *= j;
			j --;
		}
		
		if(abs(rank * pow(2,i)) > MAXINT)
		{
			printf("计算结果,超限!");
			break;
		}
		a[i] = rank * pow(2,i);
		
		
	}
	return;
}
void print_array();//打印数组 
int main()
{
	long int n = 0;
	scanf("%d",&n);//输入n 
	reckon_(n);//calculation
	print_array();//打印数组 
	return 0;
} 

void print_array()
{
	for(int i = 0;a[i] != 0;i ++)
	{
		printf("%lld ",a[i]);
	}
	printf("\n");
	return;
}

​​​​​​​

猜你喜欢

转载自blog.csdn.net/qq_47991812/article/details/121516237