n的阶乘(高精度)题解

题目

问题描述

输入一个正整数n,求出1到n的阶乘。n<=30

输入格式

一个整数n

输出格式

一个整数,表示结果

样例输入

9

样例输出

362880

分析

求n的阶乘,从n<=30可以看出结果明显超出longlong的范围,那么就要用到我们的高精度了。高精度的本质是用数组模拟竖式计算,这道题计算里参与的每个数都没有超出int范围,直接读入就行,但结果要用数组记录。
记得第一位初始化为1,下为核心计算部分,可与其他见解搭配食用

for(int i=1;i<=n;i++){//循环n次,每次×i
	for(int k=0;k<lena;k++) a[k]*=i;//模拟竖式乘法第一步:将每一位×i
	for(int k=0;k<lena;k++){//判断进位
		if(a[k]>=10){
			a[k+1]+=a[k]/10;//进十位
			a[k]=a[k]%10;//保留个位
			if(k==lena-1){//若是第一位则将长度更新
			    lena++;
			}
		}
	}
}

最后输出因为我下标从0开始,所以要<lena,若是从1开始,则要<=lena

for(int i=lena-1;i>=0;i--){
	cout<<a[i];
}

本人蒟蒻,写得不好,请见谅

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值