大数运算之100的阶乘(C语言实现)

晚上折腾了一下100阶乘的运算,用C语言实现了一个,原理很简单,就是将大数拆分然后存储在数组中,只要数组开得够大,求200或者更大的阶乘都应该没问题,代码如下:

#include "stdafx.h"

void dgCal(int a[],int b,int i)
{
	if(i>a[0])
	{
		a[0]++;
	}
	int temp=a[i]+b;
	if(temp>=10)
	{
		a[i]=temp%10;
		dgCal(a,temp/10,i+1);
	}
	else
	{
		a[i]=temp;
	}

}

void calculator(int a[],int b[])
{
	int temp=0;
	int gw;
	int sw;
	for(int i=1;i<=b[0];i++)
	{
		temp=a[i]+b[i];
		if(temp>=10)
		{
			a[i]=temp%10;
			dgCal(a,temp/10,i+1);//使用递归进位
		}
		else
		{
			a[i]=temp;
		}
		
	}
}

void copyArray(int a[],int b[])
{
	for(int i=0;i<=a[0];i++)
	{
		b[i]=a[i];
	}
}

void printa(int a[])
{
	printf("位数:%d\n",a[0]);
	for(int i=a[0];i>=1;i--)
	{
		printf("%d",a[i]);
	}
	printf("\n"); 
}

void printb(int b[])
{
	printf("位数:%d\n",b[0]);
	for(int i=b[0];i>=1;i--)
	{
		printf("%d",b[i]);
	}
	printf("\n"); 
}

int _tmain(int argc, _TCHAR* argv[])
{
	int i,j;

	int a[200];
	int b[200];//辅助数组
	for(i=0;i<200;i++)
	{
		a[i]=0;
	}

	a[0]=1;
	a[1]=2;
	
	//printa(a);
	copyArray(a,b);
	//printb(b);

	for(i=3;i<=100;i++)//从3开始
	{
		copyArray(a,b);
		for(j=0;j<i-1;j++)//相加i-1次
		{
			calculator(a,b);
		}
	}
	printf("100的阶乘:\n"); 
	printa(a);
	printf("99的阶乘:\n"); 
	printb(b);

	return 0;
}

结果截图:

简单实现了一下,没有优化,高手可以进一步优化!


  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值