ZZULIOJ 1089:阶乘的最高位(C语言)

ZZULIOJ【1089】阶乘的最高位:(int类型)

1089: 阶乘的最高位

1089: 阶乘的最高位
时间限制: 1 Sec 内存限制: 128 MB

题目描述

输入一个正整数n。输出n!的最高位上的数字。
输入:输入一个正整数n(n不超过1000)。
输出:输出n!的最高位上的数字。
样例输入:1000
样例输出:4
提示:注意double类型溢出问题。
问题链接.

思路

很明显我无视了最重要的提示,
加上学艺不精想不到1000!这么大的数该怎么表示,
然后就想到了数组,简单来说就是把十进制的每一位都用一个数来表示(感觉相当麻烦)

仅供参考!!!

#include<stdio.h> 
int main()
{
	int n,a[3000]={1},i,k,t,l=1,m;	//数组越大可以算的数也越大(默认为1,因为要算乘法) 
	scanf("%d",&n);					 
	for(i=1;i<=n;i++) 				//阶乘循环 i的数值代要乘的那个数,每次+1 
	{								 
		t=0;						//t用来保存数(工具人) 
		for(k=0;k<l;k++)			//数位循环 k的数值代表数位,l用来记录数组中最高位的位置 
		{
			m=a[k]*i;				//m为k数位乘积 例;当a[0]=6,i=4,则 m=24
	    	a[k]=(m+t)%10;			//将t与m相加,对10取余,得到k数位上的数,例中a[0]为个位,计算后个位数为4
			t=(m+t)/10;				//将t与m相加,因为是整型除以10可直接得到k+1位的数,例中m=24 时t=2
			if(t!=0&&k==l-1) l++;	//t!=0时有进位,k==l-1表示为最高位进位 此时l+1 
		}							//若t!=0但k!=l-1则为非最高位进位,即此时为中间位计算,l不用+1 
	}
	printf("%d",a[l-1]);			//其实最高位在l-1的位置 
}

本人第一次写博客,还请大家多多指正,感谢!

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值