大数阶乘

在做程序题过程中,遇到大数阶乘问题,现今来回顾下写的代码。
牛客网:程序地址

int main() {
	int n;
	int i,j;
	int array[10000]={0};		//数组存储很大的数:由后往前存储
	int carry=0;		//进位
	/*
        上述何为进位?
        例如:我现在得到了 145 这个整数,而我们数组只能存储一位数字,
             故我现在 carry = 145/10,那么 carry=14,所以 14 为进位
	*/
	int count=1;	//一共多少位数(即当前数字有多少位)
	int sum=0;		//计算阶乘过程中的结果(两个数的阶乘,例如:3*4=12)
	array[1]=1;		//array[0]舍弃
	scanf("%d",&n);		//输入,计算n的阶乘
	for(i=2;i<=n;i++) {		//阶乘
		//固然下面的代码很难理解,但是多看几遍,手写一遍代码
		for(j=1;j<=count;j++) {	
			sum = array[j]*i + carry;
			carry = sum / 10;	//进位
			array[j] = sum % 10;
		}
		while(carry) {
			array[j] = carry % 10;
			carry = carry / 10;
			j++;
		}
		count = j-1;	//上面的j++,多加了一位
	}
	//倒序输出
	for(i=count;i>0;i--) {		//需要写 count,是阶乘出来的数有多少位
		printf("%d",array[i]);
	}
}

注意:上述代码晦涩难懂,可以尝试自己手写一遍,会有较深的体会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InitShadow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值