1.高精度整数_阶乘求解

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/mrjkzhangma/article/details/89406928

编写程序,实现对任意一个高精度整数进行阶乘求解。
C代码如下:
第一种方法:构造bigInteger结构体的方式来实现

//高精度阶乘
#include<stdio.h>
#include<string.h>
struct bigInteger{
	int digit[10000];
	int size;
	void init(){//初始化
		for(int i=0;i<10000;i++) digit[i]=0;
		size=0;}
	void set(int x)  //用一个小整数设置高精度整数
	{
		init();
		do{       //对小整数4位为一个单位分解依次存入digit当中
			digit[size++]=x%10000;
			x/=10000;
		}while(x!=0);
	}
	void output(){   //输出
		for(int i=size-1;i>=0;i--){
			if(i!=size-1) printf("%04d",digit[i]);
			else printf("%d",digit[i]);}
		printf("\n");
	}
	bigInteger operator * (int x) const{  //乘法运算符
		bigInteger ret;     //将要返回的高精度整数
		ret.init();   //初始化
		int carry=0;   //进位初始值为0
		for(int i=0;i<size;i++){
			int tmp=x*digit[i]+carry;  //用小整数x乘以当前位数字并加上来自低位的进位
			carry=tmp/10000;   //计算进位
			tmp%=10000;   //去除进位部分
			ret.digit[ret.size++]=tmp;   //保存该位数字
		}
		if(carry!=0){    //若最高位有进位
			ret.digit[ret.size++]=carry;  //保存该进位
		}
		return ret;  //返回结果
	}
}a;
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF){
		a.init();
		a.set(1);
		for(int i=1;i<=n;i++)
		{
			a=a*i;
		}
		a.output();
	}
	return 0;
}

结果显示:
在这里插入图片描述

2.简洁版:采取进位的方式来计算高精度整数阶乘

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 4000
int main() {
	int n,a[MAX],i,j,s,r=0;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	a[0]=1;
	for(i=2;i<=n;i++){
		for(j=0;j<MAX;j++){
			s=a[j]*i+r;
			r=s/10;//进位
			a[j]=s%10;
		}
	}
	for(i=MAX-1;i>=0;i--){
		if(a[i])
			break;
	}
	for(j=i;j>=0;j--)//倒序输出
		printf("%d",a[j]);
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mrjkzhangma/article/details/89406928
今日推荐