蓝桥杯基础练习超全习题题解VIP版——BASIC-30 阶乘计算(用数组进行超出计算机整数表示范围的整数运算)

每日刷题(三十二)

BASIC-30、阶乘计算

在这里插入图片描述
在这里插入图片描述
这个题目有点魔鬼,因为你要考虑你的数组到底设多大,你的数组能设多大。其次你得考虑数字存放的逻辑,分情况讨论,进位和未进位,同时需要设置两个变量,一个存放刚开始做乘法所产生的的进位,另一个存放前一个数乘法运算后产生的进位,每一轮循环要修改其值。

详细C代码如下:

#include<stdio.h>
//#include<string.h>

int main()
{
	int a[90000] = {0};
//	memset(a, 0, sizeof(a));
	int n;
	scanf("%d",&n);
	int i;
	a[0] = 1;
	int j = 1;
	int t = 0;
	int m = 0;
	int s = 0;
	for(j = 1; j <= n; j++)
	{ 
		t = 0;
		m = 0;
		for(i = 0; i < 90000; i++)
		{
			m = a[i] * j / 10;
			a[i] = a[i] * j % 10;
			
			if(a[i] + t >= 10)			//前一个数的进位 
			{
				s = a[i] + t;
				t = m + s / 10;
				a[i] = s % 10;
			}
			else
			{
				a[i] += t;
				t = m;
			}
		
		}
	}
	int k = 0;
	for(i = 89999; i >= 0; i--)
	{
		if(a[i] != 0)
			k = 1;
		if(k)
			printf("%d",a[i]);	
	}
		
	printf("\n");
	return 0;
} 

这里列出一部分示例以及结果:
在这里插入图片描述
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值